Пожалуйста вставляйте код и картинки правильно:
Зато работает в другую сторону...
for (int i=1; i<=OrdersTotal(); i++) { if (OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderType()==OP_SELL && OrderSymbol()==Symbol()) { s++; } if (OrderType()==OP_BUY && OrderSymbol()==Symbol()) { b++; } } }
Vladimir Belev:
В другую сторону от нуля, иначе тоже пропустит. А i<OrdersTotal
Зато работает в другую сторону...
Artyom Trishkin:
В другую сторону от нуля, иначе тоже пропустит. А i<OrdersTotal
спасибо
В другую сторону от нуля, иначе тоже пропустит. А i<OrdersTotal
Поторопился обрадоваться - проблема сохраняется. При пересчете ордеров их сумма отлична от реального числа, при этом OrdersTotal возвращает реальное число. В проверку добавлял все типы, включая те что не открывались. Кто-нибудь сталкивался с подобным?
Vladimir Belev:
Прошу помощи в отладке
При тестировании Конструкция пропускает первый ордер:
Последующие ордера учитывает.
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //+------------------------------------------------------------------+ int PosBuy=0,PosSell=0; double ProfitBuy=0,ProfitSell=0; for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { PosBuy++; ProfitBuy+=(OrderProfit()+OrderCommission()+OrderSwap()); } if(OrderType()==OP_SELL) { PosSell++; ProfitSell+=(OrderProfit()+OrderCommission()+OrderSwap()); } } } } Alert("PosBuy ",PosBuy," PosSell ",PosSell," ProfitBuy =",DoubleToString(ProfitBuy,2)," ProfitSell =",DoubleToString(ProfitSell,2)); //+------------------------------------------------------------------+ } //+------------------------------------------------------------------+
pako:
спасибо. профит - не главное, про него можно забыть(кстати он там подсчитывается для цены отстоящей на N пунктов). главное что даже простейший вариант с подсчетом кол-ва ордеров - выдает неверные результаты.
Vladimir Belev:
спасибо. профит - не главное, про него можно забыть(кстати он там подсчитывается для цены отстоящей на N пунктов). главное что даже простейший вариант с подсчетом кол-ва ордеров - выдает неверные результаты.
У вас в цикле есть вызов других функций работающих с ордерами (FindLastOpen()), если в ней тоже есть перебор и OrderSelect() то он перетирает OrderSelect из главного цикла и могут быть конфузы. Вспомогательные функции используйте один раз ДО основного цикла, тогда все будет четко, как в примерах от pako.
спасибо. профит - не главное, про него можно забыть(кстати он там подсчитывается для цены отстоящей на N пунктов). главное что даже простейший вариант с подсчетом кол-ва ордеров - выдает неверные результаты.
Andrey Barinov:
У вас в цикле есть вызов других функций работающих с ордерами (FindLastOpen()), если в ней тоже есть перебор и OrderSelect() то он перетирает OrderSelect из главного цикла и могут быть конфузы. Вспомогательные функции используйте один раз ДО основного цикла, тогда все будет четко, как в примерах от pako.
Спасибо! Это похоже на правду. Первые тесты показали что проблема именно в этом.
У вас в цикле есть вызов других функций работающих с ордерами (FindLastOpen()), если в ней тоже есть перебор и OrderSelect() то он перетирает OrderSelect из главного цикла и могут быть конфузы. Вспомогательные функции используйте один раз ДО основного цикла, тогда все будет четко, как в примерах от pako.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прошу помощи в отладке
При тестировании Конструкция пропускает первый ордер:
Последующие ордера учитывает.