Скачать MetaTrader 5

Помогите починить советника

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
midav
33
midav  
Этот советник не всегда выставляет тейк профит и стоп лосс, один человек сказал что нужно добавить пару пунктов спреда. А куда их добавит в этот советник?
Файлы:
24_1.mq4 7 kb
Vitalie Postolache
12315
Vitalie Postolache  

Чтобы быть уверенным что обе цены зашли за МА, советую писать if (Ask < ima) дл продаж и if (Bid > ima) для покупок, поможет избежать совершения сделок когда Бид и Аск по разные стороны от МА. Но это всё равно не гуд, открываться прямо на линии МА.

Строка OrderModify(OrderTicket(), OrderProfit(), SL, TP, 0); - угадайте что не так )))

Да и в конструкции ниже не вижу смысла в двойной модификации:

            TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
            OrderModify(ticket, OrderProfit(), SL, TP, 0);
            SL = NormalizeDouble(Bid - StopLoss * Point, Digits);
            OrderModify(ticket, OrderProfit(), SL, TP, 0);      

Достаточно один раз модифицировать, последней строчкой.

Да, и для продаж всё же

            TP = NormalizeDouble(Bid - TakeProfit  * Point, Digits);//хотя тут тоже АСК можно, всё равно закрываться позиция по Аск будет...
            SL = NormalizeDouble(Ask + StopLoss * Point, Digits);  

А что насчёт добавки к МА, наверное имелось в виду добавить это условие:

      if (Bid > ima+NormalizeDouble(dev*Point,Digits)) - покупка
и
       if(Ask < ima-NormalizeDouble(dev*Point,Digits)) - продажа, 

где dev - отступ от МА в пунктах.

Artyom Trishkin
Модератор
78961
Artyom Trishkin  
evillive:

Чтобы быть уверенным что обе цены зашли за МА, советую писать if (Ask < ima) дл продаж и if (Bid > ima) для покупок, поможет избежать совершения сделок когда Бид и Аск по разные стороны от МА. Но это всё равно не гуд, открываться прямо на линии МА.

Да и в конструкции ниже не вижу смысла в двойной модификации:

Достаточно один раз модифицировать, последней строчкой.

Да, и для продаж всё же

А что насчёт добавки к МА, наверное имелось в виду добавить это условие:

Есть ещё неучтённый StopLevel. А он ещё бывает нулю равен, и тогда высчитывается по-разному. В Альпари, например, он всегда нулевой, но ограничения есть, и они считаются как спред*2

Значит нужно сначала определиться с уровнем StopLevel:

Глобально:

int level=0, sp=0;

Затем в start() :

   sp=MarketInfo(sy,MODE_SPREAD);
//-------------- Проверка StopLevel ---------------
   level=MarketInfo(sy,MODE_STOPLEVEL );           // Значение уровня установки стопов
   if (level==0) level=sp*2;

А потом уже сравнивать размер стоп-приказа с полученным уровнем и использовать рассчитанные верные значения для стоп-приказов:

//+----------------------------------------------------------------------------+
   double pa=MarketInfo(Symbol(),MODE_ASK),  // цена Ask
          pb=MarketInfo(Symbol(),MODE_BID),  // цена Bid
          sl=0, tp=0;
   if(OrderType()==OP_BUY) {
      sl=NormalizeDouble(MathMin(pb-StopLoss*Point,pb-(level+1)*Point),Digits);
      tp=NormalizeDouble(MathMax(pb+TakeProfit*Point,pb+(level+1)*Point),Digits);
      // далее используем полученные уровни 
      // sl для цены StopLoss 
      // и tp для цены TakeProfit
      }
   if(OrderType()==OP_SELL) {
      sl=NormalizeDouble(MathMax(pa+StopLoss*Point,pa+(level+1)*Point),Digits());
      tp=NormalizeDouble(MathMin(pa-TakeProfit*Point,pa-(level+1)*Point),Digits());
      // далее используем полученные уровни 
      // sl для цены StopLoss 
      // и tp для цены TakeProfit
      }
//+----------------------------------------------------------------------------+
Vitalie Postolache
12315
Vitalie Postolache  
Да там если придираться по полной (как для запуска на реал), то пальцев не хватит все косяки перечислять )))
Artyom Trishkin
Модератор
78961
Artyom Trishkin  
evillive:
Да там если придираться по полной (как для запуска на реал), то пальцев не хватит все косяки перечислять )))

Так я ж не придираюсь. Но такие-то расчёты просто обязаны быть, даже в советнике для тестера. Это ж азы. А то потом репу чешут: что, да от куда...

ЗЫ. А в приложенный код не глядел, чтобы плохо не стало

Alexander
2441
Alexander  
evillive:

Но это всё равно не гуд, открываться прямо на линии МА.


Какие-то технические проблемы или просто религия не позволяет?
Vitalie Postolache
12315
Vitalie Postolache  
Roger:

Какие-то технические проблемы или просто религия не позволяет?

Религия - зло, конечно не позоляет )))
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий