+1
добавил в мою версию стоповые и лимитные, трал, торговлю по времени, автолот. но править чужой код это не ко мне. в следующий раз пишите в тз что нужно править.

со стоповыми идет намного лучше:

оптимизировал за последний год. тест 3 года. спред 10.





www.opentraders.ru/downloads/2611/

avatar

AM2

  • 5 апреля 2020, 09:23
0
оригинал декомпил. смотрите какие переменные:


double Gda_132[];
double Gda_136[];
double Gda_140[];
double Gda_144[];
string Gs_148;
bool Gi_156;
bool Gi_160;
int Gi_164;


если опишите алгоритм расчета линий то можно написать
avatar

AM2

  • 5 апреля 2020, 07:39
0
завтра сделаю
avatar

AM2

  • 4 апреля 2020, 21:19
0
А вот как бы такое ограничение советнику сделать, чтобы советник совершал только одну сделку на каждое изменение цвета индикатора (тренда)?
Индикатор изменился — советник открыл сделку.
Получил стоп (или тейк) и ждет следующего изменения индикатора.

Сейчас получается много лишних сделок и пока советник добирается до изменения цвета индикатора по итогу уходит на тренде в минус.


надо было сразу об этом написать
avatar

AM2

  • 4 апреля 2020, 14:31
+1
Самый простой вариант.

Цена отбилась от поддержки — купили:



отбилась от сопротивления — продали:



www.opentraders.ru/downloads/2617/
avatar

AM2

  • 4 апреля 2020, 10:25
0
все добавил плюс отключаемое закрытие по сигналу: www.opentraders.ru/downloads/2562/

avatar

AM2

  • 4 апреля 2020, 08:15
0
То есть просто когда гистограмма осциллятора выше нуля и все, а цена фиг знает где


у вас индикатор не показывает значения канала в левом верхнем углу
avatar

AM2

  • 3 апреля 2020, 17:54
0
посмотрел :) 



www.opentraders.ru/downloads/2616/
avatar

AM2

  • 3 апреля 2020, 17:50
0
посмотрю завтра
avatar

AM2

  • 3 апреля 2020, 17:25
0
посмотрел что можно сделать. быстро не сделаешь, а с этим не ко мне.
avatar

AM2

  • 3 апреля 2020, 14:57
0
А можно сделать так, чтобы ордера закрывались не вместе-веером (как на рис), а каждый ордер отдельно в бу?


сделал бу по отдельности:



www.opentraders.ru/downloads/2590/

avatar

AM2

  • 3 апреля 2020, 14:46
0
не берусь
avatar

AM2

  • 3 апреля 2020, 13:35
0
добавил, куда деваться раз так просят :) 



www.opentraders.ru/downloads/2590/
avatar

AM2

  • 3 апреля 2020, 07:45
0
вот например советник Zona:



торгует на отбой и пробой зоны:


//+------------------------------------------------------------------+
//|                                                         Zona.mq4 |
//|                                              Copyright 2019, AM2 |
//|                                      http://www.forexsyatems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, AM2"
#property link      "http://www.forexsyatems.biz"
#property version   "1.00"
#property strict

//--- Inputs 
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 1200;     // лось
extern int TakeProfit    = 60;       // язь
extern int TrailingStop  = 0;        // трал
extern int Delta         = 100;      // дополнение к стопу
extern int Sigma         = 777;      // расстояние зон от цены
extern int Gamma         = 222;      // ширина зоны
extern int SafePoint     = 300;      // сейф
extern double SafePart   = 0.5;      // часть лота
extern int Spread        = 30;       // спред
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Exp           = 1;        // истечение в часах
extern int Magic         = 123;      // магик

extern bool BuyStop      = 0;        // BuyStop
extern bool SellStop     = 0;        // SellStop

bool b=1,s=1;

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
   PutRect("UP",Time[0],Bid+Sigma*_Point,Time[50],Bid+(Sigma+Gamma)*_Point,Red);
   PutRect("DN",Time[0],Bid-Sigma*_Point,Time[50],Bid-(Sigma+Gamma)*_Point,Blue);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price,double st=0)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); else sl=st;
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); else sl=st;
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+3600*Exp,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type || type==-1) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRect(string name,datetime t1,double p1,datetime t2,double p2,color clr)
  {
   ObjectDelete(0,name);
//--- создадим прямоугольник по заданным координатам
   ObjectCreate(0,name,OBJ_RECTANGLE,0,t1,p1,t2,p2);
//--- установим цвет прямоугольника
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,1);
   ObjectSetInteger(0,name,OBJPROP_SELECTED,1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*Point)
                 {
                  if(OrderStopLoss()<Bid-TrailingStop*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                 {
                  if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Safe()
  {
   bool c;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderOpenPrice()<=(Bid-SafePoint*Point))
                 {
                  if(OrderLots()==Lots) c=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+SafePoint*Point))
                 {
                  if(OrderLots()==Lots) c=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int spread=(int)MarketInfo(_Symbol,MODE_SPREAD);

   if(SafePoint>0) Safe();
   if(TrailingStop>0) Trailing();

   if(CountOrders()<1 && spread<Spread)
     {
      if(b && Ask>ObjectGetDouble(0,"UP",OBJPROP_PRICE1) && Ask<ObjectGetDouble(0,"UP",OBJPROP_PRICE2) && Open[0]<ObjectGetDouble(0,"UP",OBJPROP_PRICE1))
        {
         PutOrder(1,Bid,ObjectGetDouble(0,"UP",OBJPROP_PRICE2)+Delta*Point);
         if(BuyStop) PutOrder(4,ObjectGetDouble(0,"UP",OBJPROP_PRICE2)+Delta*Point,ObjectGetDouble(0,"UP",OBJPROP_PRICE1)-Delta*Point);
         b=0;s=1;
        }
        
      if(s && Bid<ObjectGetDouble(0,"DN",OBJPROP_PRICE1) && Bid>ObjectGetDouble(0,"DN",OBJPROP_PRICE2) && Open[0]>ObjectGetDouble(0,"DN",OBJPROP_PRICE1)) 
        {
         PutOrder(0,Ask,ObjectGetDouble(0,"DN",OBJPROP_PRICE2)-Delta*Point);
         if(SellStop) PutOrder(5,ObjectGetDouble(0,"DN",OBJPROP_PRICE2)-Delta*Point,ObjectGetDouble(0,"DN",OBJPROP_PRICE1)+Delta*Point);
         s=0;b=1;
        }
     }

   Comment("\n Trades: ",CountOrders(),
           "\n Free Margin: ",AccountFreeMargin(),
           "\n UP1: ",ObjectGetDouble(0,"UP",OBJPROP_PRICE1),
           "\n UP2: ",ObjectGetDouble(0,"UP",OBJPROP_PRICE2),
           "\n DN1: ",ObjectGetDouble(0,"DN",OBJPROP_PRICE1),
           "\n DN2: ",ObjectGetDouble(0,"DN",OBJPROP_PRICE2));
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 3 апреля 2020, 07:25
+1
меня в поручители записали? *shock* :D 
такого еще не было! *pardon* 
avatar

AM2

  • 3 апреля 2020, 07:16
0
помню как то делал такой советник. смотрите в базе
avatar

AM2

  • 2 апреля 2020, 19:59