Помогите с трейлинг стопом пожалуйста

 

Я новичок в программировании, недавно начала изучать. Написала 3 трала: 1 простой фиксированное кол-во пунктов, второй по экстремумам, третий по параболику.

Из них работает только простой, в остальных ошибки выдает 130, 4051. Не подскажите, что не так и где я накосячила??? Заранее спасибо 

Файлы:
 

В варианте с параболиком не учитывается направление торговли.

И если менять только СЛ, то правильнее будет Ans=OrderModify(OrderTicket(),OrderOpenPrice(),SLnew,OrderTakeProfit());

 
evillive:

В варианте с параболиком не учитывается направление торговли.

И если менять только СЛ, то правильнее будет Ans=OrderModify(OrderTicket(),OrderOpenPrice(),SLnew,OrderTakeProfit());


 а все равно выдает ошибки...
 
Katrin:

 а все равно выдает ошибки...
 

Я имела в виду, что тестировала его на ордерах без тейкпрофита, поэтому дополнение про тейкпрофит роли не играет, но все равно спасибо

И в трале по экстремумам направление учтено, но ошибки вылезают все равно, хотелось бы понять почему и как их устранить

Заранее спасибо тем, кто поможет. Я понимаю, что вопрос глупый, но сама ошибку найти не могу 

 

Traling Stop - не лучший объект для начинающего программиста, имхенько. 

Ошибки вылезают потому, что Вы торопитесь. Объект уже почти создан, но - почти, а Вы уже на него ссылаетесь. Ну, или цена еще не сильно отличается от цены открытия, а Вы уже говорите: при этой цене - стоп.  

 

if(OrderStopLoss()!=SLnew) не очень правильно, о чём и сказал Алексей. Лучше бы  сравнивать разницу с величиной стоплевела:

if(OrderStopLoss()-SLnew >  MarketInfo(symbol, MODE_SPREAD)*2*_Point) - если разница стопа нынешнего и стопа вычисленного больше двойного спреда, то можно избежать 130.

Спред взят на случай, если ДЦ выдаст стоплевел=0, что бывает.

В варианте с эсктремальным тралом непонятно откуда берётся значение Indent, так что помочь сложнее.

Что до 4051,  может всё же перестанете пытаться менять время истечения отложенного ордера на рыночном ордере (OrderModify(OrderTicket(),OrderOpenPrice(),SLnew,0,0)), просто не трогайте этот параметр.

 
Katrin:

Я новичок в программировании, недавно начала изучать. Написала 3 трала: 1 простой фиксированное кол-во пунктов, второй по экстремумам, третий по параболику.

Из них работает только простой, в остальных ошибки выдает 130, 4051. Не подскажите, что не так и где я накосячила??? Заранее спасибо 

Надо разделить понятия цена SL и расстояние до SL

                     SLnew =NormalizeDouble(Bid-TStep,Digits); // Новый StopLoss
                     StopCorrect(Symbol(),SLnew);
// Здесь цена SL

А здесь

   Extrem_Stop = MarketInfo(symbol, MODE_STOPLEVEL)*Point;          
   if(Stop < Extrem_Stop) CorrStop = Extrem_Stop;

// Сравнивается цена с расстоянием

Простой трейлинг работает совершенно случайно. Потому, что функция double StopCorrect(string symbol, double Stop) всегда возвращает то значение Stop которое получила на входе.

Причина обращения: