Можно ли совместить отладку и тестер? Т.е. если запускаю по F5, то тестер, естественно, не запускается. А если стартую экспрта в тестере, то точки останова игнорируются. Или что-то не так делаю?
Изучаю советник, поставляемый в качестве примера, MovingAverage. Все в нем красиво. Вопрос по тестеру.
В этом советнике анализируется свеча только на первом тике. Обратил внимание, что некоторые ситуации проскакивают без обработки. Оказывается редкая свеча рождается с первого тика. Это эффект связи, мой глюк или тестера?
Видимо, чтобы обрабатывать свечу только при рождении, т.е. один раз, нужно последнюю обработанную свечу хранить в статической переменной?
P/S/ Только начинаю изучать язык, поэтому такие нудные вопросы.
Здравствуйте, пишу советник, может успею к чемпионату. Написал вроде простой код, там используется 2 пользовательских индикатора, но значения этих индикаторов равны 0, по-этому сделка не совершается, посмотрите пожалуйсто, что я не так сделал или может проблема в самих индикатора?
//+------------------------------------------------------------------+//| trend_masim.mq5 |//| Copyright 2010, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2010, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"inputint period =48;
inputint period1 =30;
inputint sl=200;
inputdouble lot=0.1;
inputlong magicBUY1=102;
inputint magicSELL1=202;
inputstring sim="eur";
double ind1[];
double ind2[];
int hind1;
int hind2;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
hind1=iCustom("EURUSD",PERIOD_H1,"trend_v3_5",period);
hind2=iCustom("EURUSD",PERIOD_H1,"trend_v3",4);
return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
IndicatorRelease(hind1);
IndicatorRelease(hind2);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+int bar;
double MAX,MIN,H,A0,A1,A2;
voidOnTick()
{
int i, j,jj, k, g, q, ticket,l;
double stop;
MqlTradeRequest mrequest;
MqlTradeResult mresult;
MqlTick latest_price;
ArraySetAsSeries(ind1,true);
ArraySetAsSeries(ind2,true);
MAX=CopyBuffer(hind1,2,0,3,ind1);
MIN=CopyBuffer(hind2,0,0,3,ind2);
SymbolInfoTick(_Symbol,latest_price);
//BUYif (PositionSelect(_Symbol)==1 && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY ){jj=1;} //определяет если позиция BUYif (jj==0 ){
if ( ind2[1]>ind1[1]){ // условие на покупкуPrint("индикатор=",ind2[1]," ",ind1[1]);
mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask
mrequest.sl = NormalizeDouble(latest_price.ask - sl*_Point,_Digits); // Stop Loss
mrequest.tp = NormalizeDouble(0,_Digits); // Take Profit
mrequest.symbol = _Symbol; // символ
mrequest.volume = lot; // количество лотов для торговли
mrequest.magic = magicBUY1; // Magic Number
mrequest.type = ORDER_TYPE_BUY; // ордер на покупку
mrequest.type_filling = ORDER_FILLING_AON; // тип исполнения ордера - все или ничего
mrequest.deviation=10; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend(mrequest,mresult);
GlobalVariableSet( "k11"+sim,Bars2);
GlobalVariableSet( "bar11"+sim,Bars("EURUSD",NULL));
}}
}
//+------------------------------------------------------------------+
В этом советнике анализируется свеча только на первом тике. Обратил внимание, что некоторые ситуации проскакивают без обработки. Оказывается редкая свеча рождается с первого тика. Это эффект связи, мой глюк или тестера?
Видимо, чтобы обрабатывать свечу только при рождении, т.е. один раз, нужно последнюю обработанную свечу хранить в статической переменной?
Появление нового бара лучше отслеживать при помощи изменения времени бара, предварительно сохранив его в статической переменной.
Но вот что мне непонятно, так как отлаживать советники. Понятно, что на тестере, не систему, которую делаем, а именно баги в программе. Вот, например, непонятно почему не заходит программа в определённую ветку - почему? Нужно ставить разные отладочные печати, потом выискивать их в журнале, потом ставить другие печати, ждать определенное время пока программа отработает и снова искать в журнале ?
Здравствуйте, пишу советник, может успею к чемпионату. Написал вроде простой код, там используется 2 пользовательских индикатора, но значения этих индикаторов равны 0, по-этому сделка не совершается, посмотрите пожалуйсто, что я не так сделал или может проблема в самих индикатора?
Чтобы отладить ваш код заменил пользовательские индикаторы на МА:
if (PositionSelect(_Symbol)==1 && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY ){jj=1;} //определяет если позиция BUY if (jj==0 ){ if ( ind2[1]>ind1[1]){ // условие на покупку Print("индикатор=",ind2[1]," ",ind1[1]); mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // последняя цена ask mrequest.sl = NormalizeDouble(latest_price.ask - sl*_Point,_Digits); // Stop Loss mrequest.tp = NormalizeDouble(0,_Digits); // Take Profit mrequest.symbol = _Symbol; // символ mrequest.volume = lot; // количество лотов для торговли mrequest.magic = magicBUY1; // Magic Number mrequest.type = ORDER_TYPE_BUY; // ордер на покупку mrequest.type_filling = ORDER_FILLING_AON; // тип исполнения ордера - все или ничего mrequest.deviation=10; // проскальзывание от текущей цены //--- отсылаем ордер OrderSend(mrequest,mresult);
получается, что все дело в индикаторах? тестер мне пишет ошибку
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3.mq5' (71,9) 2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3_5.mq5' (83,9)
Думается мне, что корректней перед копированием информации с индюков проверять на инвалидность хендлов. Еще бы проверку на доступность этих самых данных организовать....
Не знаю по теме ли вопрос.
Можно ли совместить отладку и тестер? Т.е. если запускаю по F5, то тестер, естественно, не запускается. А если стартую экспрта в тестере, то точки останова игнорируются. Или что-то не так делаю?
Не знаю по теме ли вопрос.
Можно ли совместить отладку и тестер?
На данный момент - нет.
Значит только в реальном времени на демке? А как же отладка на интересных ситуациях?
Я поначалу так обрадовался отладчику, а скатываюсь обратно к отладочным печатям. Другие технологии отладки не просматриваются. - Огорчительно.
Изучаю советник, поставляемый в качестве примера, MovingAverage. Все в нем красиво. Вопрос по тестеру.
В этом советнике анализируется свеча только на первом тике. Обратил внимание, что некоторые ситуации проскакивают без обработки. Оказывается редкая свеча рождается с первого тика. Это эффект связи, мой глюк или тестера?
Видимо, чтобы обрабатывать свечу только при рождении, т.е. один раз, нужно последнюю обработанную свечу хранить в статической переменной?
P/S/ Только начинаю изучать язык, поэтому такие нудные вопросы.
Здравствуйте, пишу советник, может успею к чемпионату. Написал вроде простой код, там используется 2 пользовательских индикатора, но значения этих индикаторов равны 0, по-этому сделка не совершается, посмотрите пожалуйсто, что я не так сделал или может проблема в самих индикатора?
Lunatic:
В этом советнике анализируется свеча только на первом тике. Обратил внимание, что некоторые ситуации проскакивают без обработки. Оказывается редкая свеча рождается с первого тика. Это эффект связи, мой глюк или тестера?
Видимо, чтобы обрабатывать свечу только при рождении, т.е. один раз, нужно последнюю обработанную свечу хранить в статической переменной?
Появление нового бара лучше отслеживать при помощи изменения времени бара, предварительно сохранив его в статической переменной.
Примеры можно найти в IsNewBar, и статье Ограничения и проверки в экспертах.
Появление нового бара лучше отслеживать при помощи изменения времени бара, предварительно сохранив его в статической переменной.
Примеры можно найти в IsNewBar, и статье Ограничения и проверки в экспертах.
Спасибо, с этим ясно.
Но вот что мне непонятно, так как отлаживать советники. Понятно, что на тестере, не систему, которую делаем, а именно баги в программе. Вот, например, непонятно почему не заходит программа в определённую ветку - почему? Нужно ставить разные отладочные печати, потом выискивать их в журнале, потом ставить другие печати, ждать определенное время пока программа отработает и снова искать в журнале ?
Как лучше организовать поиск ошибок программы?
Здравствуйте, пишу советник, может успею к чемпионату. Написал вроде простой код, там используется 2 пользовательских индикатора, но значения этих индикаторов равны 0, по-этому сделка не совершается, посмотрите пожалуйсто, что я не так сделал или может проблема в самих индикатора?
Чтобы отладить ваш код заменил пользовательские индикаторы на МА:
И поправил копирование значений в массив:
Сейчас есть значения индикаторов:
Чтобы отладить ваш код заменил пользовательские индикаторы на МА:
И поправил копирование значений в массив:
Сейчас есть значения индикаторов:
получается, что все дело в индикаторах? тестер мне пишет ошибку
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3.mq5' (71,9)
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 Array out of range in 'trend_v3_5.mq5' (83,9)
To m_a_sim
Думается мне, что корректней перед копированием информации с индюков проверять на инвалидность хендлов. Еще бы проверку на доступность этих самых данных организовать....