cashcube: Как это остановить. | Как вы думаете? Перед открытием нового проверяется уже вышедший. |
Советник должен быть закодирован для восстановления. Если отключится электричество, произойдет сбой ОС, терминал или график будет случайно закрыт, на следующем тике все статические/глобальные переменные тикетов будут потеряны. У вас будет открытый ордер, но вы не будете знать об этом, поэтому советник никогда не попытается закрыть его, отследить SL и т.д. Как вы собираетесь восстанавливаться? Используйте циклOrderSelect для восстановления, или требуется постоянное хранение (GV/файл) номеров тикетов.
Здравствуйте, я добавил его, изменив код следующим образом.
//---------------------- Buy/Sell function (limit orders) int BuyCall( double BC) { if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)==true) { if ( BuyTicket == 0) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy limit Order",MagicNumber,expiration,Green); SellTicket = 0; // counter trade// if( Bid < BuyStopLoss && SellTicket == 0 ) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET) == true) { SellStopLoss = Bid + (StopLoss * CalcPoint1); SellTakeProfit = Bid - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,Bid,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red); BuyTicket = 0; } } } }
Он все равно принимает одни и те же ордера несколько раз с каждым тиком.
Плюс, если я убираю знак "!", то он не принимает никаких сделок.
И последнее, нужно ли мне удалить проверку buyticket и sellticket из моей основной функции?
Спасибо.
if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)==true)
-
Воспроизвести видеоПожалуйста, отредактируйте ваше сообщение.
Для больших объемов кода, прикрепите его.
- Вы бы никогда не написали if( (2+2 == 4) == true), не так ли? if(2+2 == 4) достаточно. Поэтому не пишите if(bool == true), используйте if(bool) или if(! bool). Код становится самодокументирующимся, когда вы используете осмысленные имена переменных, например bool isLongEnabled. Long_Entry звучит как цена срабатывания или номер билета, а "if long entry" - это неполное предложение.
- Где вы проверяете, закрылся ли BuyTicket? Выбор по билету всегда будет истинным (при наличии действительного номера билета), ордер может быть любым из отложенных, открытых, закрытых или удаленных.
- Вы полностью проигнорировали мое предложение о цикле OrderSelect.
Здравствуйте, WHReder, спасибо за ваш ответ.
Да, я добавил их в код SRC. Но он не отображался при редактировании.
Я удалил == true условия, как вы посоветовали.
Пожалуйста, не поймите меня неправильно, у меня есть слабые места в понимании этого цикла orderelect. Я не игнорировал. Я попробовал добавить его, но он слишком сложный, запуск показывает 16 ошибок и 2 предупреждения. Что такое MN.Count в этом коде?
// extern int Magic.Number.Base = ... // int magic.number.max; // Export to OpenOrder/MySelect // string market.pair; // Export to OpenOrder/MySelect // int init(){ // market.pair = Symbol(); // magic.number.max = Magic.Number.Base + MN.COUNT - 1;
Насчет проверки закрытого билета. Я не проверял, потому что если текущая цена ниже buystoploss, то сделка на покупку закрывается, поэтому я открыл ордер на продажу.
Bid < BuyStopLoss
С уважением,
Я расположил код примерно так... Но теперь показывает 2 ошибки... "Myselect" и "MyOrdersTotal" могут быть очищены только в глобальной области видимости.
int BuyCall( double BC) { //-----------code bool MySelect(int iWhat, int eSelect, int ePool=MODE_TRADES){ if(!OrderSelect(iWhat, eSelect, ePool) ) return (false); int mn = OrderMagicNumber(); if(mn < MNB1 ) return (false); if(mn > MNB2 ) return (false); if(OrderSymbol() != Pair ) return (false); if(ePool != MODE_HISTORY ) return (true); return(OrderType() <= OP_SELL); } int MyOrdersTotal(int op=-1, int ePool=MODE_TRADES){ #define OP_ALL -1 if(ePool == MODE_TRADES) iPos = OrdersTotal() - 1; else iPos = OrdersHistoryTotal() - 1; for(nOrders=0; iPos >= 0; iPos--) if( MySelect(iPos, SELECT_BY_POS, ePool)) if( op == OP_ALL || op == OrderType() ) nOrders++; return(nOrders); } if(!OrderSelect(BuyTicket, SELECT_BY_TICKET)) { if ( BuyTicket == 0) { BuyStopLoss = BC - (StopLoss * CalcPoint1); BuyTakeProfit = BC + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,BC,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy limit Order",MagicNumber,expiration,Green); SellTicket = 0; // counter trade// if( Bid < BuyStopLoss && SellTicket == 0 ) { if(!OrderSelect(SellTicket, SELECT_BY_TICKET)) { SellStopLoss = Bid + (StopLoss * CalcPoint1); SellTakeProfit = Bid - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,Bid,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red); BuyTicket = 0; } } } } return(BuyTicket); }
Вы не можете объявить функцию внутри другой функции
Тогда как я могу это сделать. Я имею в виду, что у меня есть много условий, которые нужно проверять по отдельности, чтобы открыть ордер на покупку/продажу.
Вот почему я сделал функцию buycall/sellcall, чтобы упростить код.
Просто советник совершает так много одинаковых сделок. Не знаю, как это остановить.
Вы не можете объявить функцию внутри другой функции
Тогда как я могу это сделать. Я имею в виду, что у меня есть много условий, которые нужно проверять по отдельности, чтобы открыть ордер на покупку/продажу.
Вот почему я сделал функцию buycall/sellcall, чтобы упростить код.
Просто советник совершает так много одинаковых сделок. Не знаю, как это остановить.
Прежде всего, не пытайтесь объявлять функцию внутри другой функции.
Я не могу понять, что вы пытаетесь сделать, глядя на код, который вы разместили. Поэтому я не могу вам помочь.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, я создал Ea, но когда я делаю обратное тестирование, он создает много одинаковых отложенных ордеров на каждом тике. Как это остановить. Мне нужен только один ордер за раз, мне не нужны его копии.
Если я запускаю этот советник на часовом графике с"только ценой открытия", то он не создает копий.
Плюс у моего советника есть опция для разворотной торговли, если лимит покупки не достигается, то он открывает сделку на продажу. Пожалуйста, сообщите мне, что я настроил правильно или нет. Любая помощь будет оценена по достоинству.
Спасибо за ваше время.