| / | Форум |
|
hope
17.01.2008 12:00
Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен. |
|
Метод выявления ошибок в коде при помощи комментирования В статье рассказывается о методе поиска ошибок в коде MQL 4, который основан на комментировании. Данный метод бывает очень полезен при возникновения проблем компилирования из-за ошибок в достаточно крупном коде. |
|
Vinin
17.01.2008 12:13
hope писал (а): Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен. Если подозреваешь что ошибка в коде, то ты обратился не по адресу. Пока из здесь присутствующих еще никто не научился читать код на чужом компьютере, да еще если этот комп находится неизвестно где. Или смени название темы "Ищу экстрасенса", или выложи часть кода, в котором ты считаешь находится ошибка. |
|
Scriptong
17.01.2008 12:17
По-моему, проблема просто в галке "Ручное подтверждение".
Убери ее и все пойдет путем.
|
|
hope
17.01.2008 14:23
Vinin писал (а): hope писал (а): Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен. Если подозреваешь что ошибка в коде, то ты обратился не по адресу. Пока из здесь присутствующих еще никто не научился читать код на чужом компьютере, да еще если этот комп находится неизвестно где. Или смени название темы "Ищу экстрасенса", или выложи часть кода, в котором ты считаешь находится ошибка. Я выкладывал код :(((( Сейчас ещё раз.... //+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ extern double TakeProfit = 300; extern double StopLoss = 300; extern double Lots = 0.1; extern double TrailingStop = 0; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double StochCurrentMain, StochPreviousMain; double StochCurrentSignal, StochPreviousSignal; double MAHightCurrent, MAHightPrevious, MALowCurrent, MALowPrevious; double PSARCurrent, PSARPrevious; int cnt, ticket; // initial data checks // it is important to make sure that the expert works with a normal // chart and the user did not make any mistakes setting external // variables (Lots, StopLoss, TakeProfit, // TrailingStop) in our case, we check TakeProfit // on a chart of less than 100 bars if(Bars<100) { Print("bars less than 100"); return(0); } // to simplify the coding and speed up access // data are put into internal variables StochCurrentMain=iStochastic(NULL,0,8,5,5,MODE_SMA,0,MODE_MAIN,1); StochPreviousMain=iStochastic(NULL,0,8,5,5,MODE_SMA,0,MODE_MAIN,2); StochCurrentSignal=iStochastic(NULL,0,8,5,5,MODE_SMA,0,MODE_SIGNAL,1); StochPreviousSignal=iStochastic(NULL,0,8,5,5,MODE_SMA,0,MODE_SIGNAL,2); MAHightCurrent=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,0); MAHightPrevious=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,1); MALowCurrent=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,0); MALowPrevious=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,1); PSARCurrent=iSAR(NULL,0,0.02,0.2,0); PSARPrevious=iSAR(NULL,0,0.02,0.2,1); int BuyTotal=0,SellTotal=0; int i; //Подсчитываем отдельно бай и селл ордеры for (i=0;i<OrdersTotal();i++) { if (OrderSelect(i,SELECT_BY_POS)) { if (OrderType()==OP_BUY) BuyTotal++; if (OrderType()==OP_SELL) SellTotal++; } } if(BuyTotal<1) { // no opened orders identified if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // check for long position (BUY) possibility if(StochCurrentMain>StochCurrentSignal && MAHightCurrent>PSARCurrent) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"macd sample",16384,0,Blue); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } } for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(StochCurrentMain<StochCurrentSignal && MALowCurrent<PSARCurrent) OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); } } } } if(SellTotal<1) { // check for short position (SELL) possibility if(StochCurrentMain<StochCurrentSignal && MALowCurrent<PSARCurrent) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"macd sample",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } // it is important to enter the market correctly, // but it is more important to exit it correctly... for(i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_SELL) { if(StochCurrentMain>StochCurrentSignal && MAHightCurrent>PSARCurrent) OrderClose(OrderTicket(),OrderLots(),Bid,3,Red); } } } } return(0); } // the end. |
|
hope
17.01.2008 14:26
Scriptong писал (а): По-моему, проблема просто в галке "Ручное подтверждение". Убери ее и все пойдет путем. Не всё так просто...естественно галочки на ручном подтверждении не стоит. Более того первую позицию он открыл без выпендрёжей, а вот противоположную открывает не закрыв первую да ещё и ручной ордер выкладывает... |
|
Vinin
17.01.2008 14:29
hope писал (а): Vinin писал (а): hope писал (а): Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен. Если подозреваешь что ошибка в коде, то ты обратился не по адресу. Пока из здесь присутствующих еще никто не научился читать код на чужом компьютере, да еще если этот комп находится неизвестно где. Или смени название темы "Ищу экстрасенса", или выложи часть кода, в котором ты считаешь находится ошибка. Я выкладывал код :(((( Сейчас ещё раз.... А что в логах пишется, какая ошибка выскакивает? |
|
hope
17.01.2008 15:36
Vinin писал (а): hope писал (а): Vinin писал (а): hope писал (а): Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен. Если подозреваешь что ошибка в коде, то ты обратился не по адресу. Пока из здесь присутствующих еще никто не научился читать код на чужом компьютере, да еще если этот комп находится неизвестно где. Или смени название темы "Ищу экстрасенса", или выложи часть кода, в котором ты считаешь находится ошибка. Я выкладывал код :(((( Сейчас ещё раз.... А что в логах пишется, какая ошибка выскакивает? В редакторе?? 0 ошибок - 0 предупреждений |
|
Vinin
17.01.2008 15:41
hope писал (а): Vinin писал (а): А что в логах пишется, какая ошибка выскакивает? В редакторе?? 0 ошибок - 0 предупреждений Не в редакторе, в терминале или в тестере. |
|
hope
17.01.2008 16:03
Ты про это??? 11:06:59 Expert Alligator 8 EURUSD,M1: loaded successfully |
|
Vinin
17.01.2008 16:11
Попробуй добавить проскальзывание OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"macd sample",16384,0,Green); |
|
Talex
17.01.2008 16:19
Посмотрел код. Вот что увидел. 1. При подсчете ордеров если вызываете OrderSelect с параметром SELECT_BY_POS, то надо указывать и 3-й параметр. Хотя это может быть и не критично. Не проверял. 2. Если закрываете ордера, то OP_SELL закрывают по ASK, а OP_BUY по BID. Да и еще я бы сначала сделал проверку на закрытие позиций, потом подсчет Бай и Селл ордеров, а потом уже открытие. Имено поэтому и не работает как надо. |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий