Здравствуйте. Есть прекрасный пример от Кима. Но там идет трал сразу после достижения плюса. Правильно ли я модифицировал для того что бы трал начинал работу с достижения позиции профита к примеру в 20 пунктов.
Спасибо.
Можно было просто использовать TrailingStep с нужным значением
нужно не через каждые 20 пунктов... а когда будет +20 то подтягивать даже по пункту с расстоянием в 40 пунктов...
Судя по формулам Вы просто увеличили TrailingStep на 20 пунктов. Стоило ли оно тех мучений - Вам виднее
Тогда, если сам не сможешь написать функцию полностью, оставь эту в первозданном виде и вызывай её если бид выше или равен OrderOpenPrice() на 20 пунктов. Ну или ниже для селов.
Правда я не смотрел не будет-ли ошибки 1. Это когда модифай с прежними параметрами.
написал вот так... но ошибка 4051... может кто нибуть увидит ошибку...
void F_TrailingPositions() { double pBid, pAsk; pAsk = MarketInfo(OrderSymbol(), MODE_ASK); if (OrderType() == OP_BUY && (pAsk - OrderOpenPrice())/Point > PROF && OrderStopLoss() < NormalizeDouble(pAsk - TS*Point,Digits)){ bool res_5 = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(pAsk - TS*Point,Digits),OrderTakeProfit(),0,Blue); return; } pBid = MarketInfo(OrderSymbol(), MODE_BID); if (OrderType() == OP_SELL && (OrderOpenPrice() - pBid)/Point > PROF && OrderStopLoss() > NormalizeDouble(pBid + TS*Point,Digits)){ bool res_6 = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(pBid + TS*Point,Digits),OrderTakeProfit(),0,Red); return; } }
написал вот так... но ошибка 4051... может кто нибуть увидит ошибку...
Так попробуйте:
//+------------------------------------------------------------------+ void start() { for(int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i,SELECT_BY_POS)) { string order_symbol=OrderSymbol(); if (AllPositions || order_symbol==Symbol()) { int order_type=OrderType(); if(order_type>1) continue; double pa=SymbolInfoDouble(order_symbol,SYMBOL_ASK); double pb=SymbolInfoDouble(order_symbol,SYMBOL_BID); double pt=SymbolInfoDouble(order_symbol,SYMBOL_POINT); double p1=(order_type==OP_BUY)?pb:OrderOpenPrice(); double p2=(order_type==OP_BUY)?OrderOpenPrice():pa; if(p1-p2>=20*pt) TrailingPositions(); } } } } //+------------------------------------------------------------------+
Остальное оставьте как у Игоря. Хотя ... костыль конечно...
В строке
if(p1-p2>=20*pt) TrailingPositions();
20 - это и есть то количество пунктов прибыли, при достижении которых нужно тралить. Хотя нужно ещё проверить наличие прибыли как таковой:
if(OrderProfit()+OrderCommission()+OrderSwap()>0) {// ... профит есть}
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте. Есть прекрасный пример от Кима. Но там идет трал сразу после достижения плюса. Правильно ли я модифицировал для того что бы трал начинал работу с достижения позиции профита к примеру в 20 пунктов.
Спасибо.