volshebnik: Почему скорость тестера падает к концу прохода третьего года ?
есть такая проблема - у меня тож такое было, если советник много сделок в год совершает - возможно много данных сохраняется для вывода итогового результата или может быть индикаторные буфера память съедают
в общем видел - не знаю, терпите - для общей картины тест за 10 лет,а оптимизировать лучше по одному году и потом делать выборку оптимальных параметров
Хочу проанализировать различные кросы с последующим выставление ордеров на другой паре:
int magic = 428;//магический номер эксперта extern double volume = 0.1;//объем выставляемого ордера extern int slippage = 3;//проскальзывание int OPB;//метка выставляемого ордера на покупку int OPS;//метка выставляемого ордера на продажу int Profit=1;//уровень профита открытых ордеров string comB = "Вход по тренду на Buy";//комментарий ордера string comS = "Вход по тренду на Sell";//комментарий ордера double StochasticCAD;//положение основной линии Стохастики на текущем баре по USDCAD double StochasticAUD;//положение основной линии Стохастики на текущем баре по AUDUSD
double SARCAD;//текущее положение индикатора по USDCAD double SARСCAD;//положение индикатора бар назад по USDCAD double SARAUD;//текущее положение индикатора по AUDUSD double SARСAUD;//положение индикатора бар назад по AUDUSD
//______________________________поиск и закрытие ордеров_______________________________________
int i; for(i=0; i<=OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;// если ордер номер i не существует, прекращаем перебор
if (OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic) // если ордер не с этой пары, на которой стоит наш эксперт continue; // пропускаем его и смотрим на следующий за ним ордер
//_______закрытие Buy_______ if (OrderType() == OP_BUY && OrderProfit()>=Profit) // если ордер бай { OPB=1; if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//и рынок близок к развороту { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // закроем его, если он в профите OPB=0; } } else { //_______закрытие Sell_______ if(OrderType() == OP_SELL && OrderProfit()>=Profit)// если ордер селл {OPS=1; if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//и рынок близок к развороту { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); // закроем его, если он в профите OPS=0; } } } }
Хочу проанализировать различные кросы с последующим выставление ордеров на другой паре:
int magic = 428;//магический номер эксперта extern double volume = 0.1;//объем выставляемого ордера extern int slippage = 3;//проскальзывание int OPB;//метка выставляемого ордера на покупку int OPS;//метка выставляемого ордера на продажу int Profit=1;//уровень профита открытых ордеров string comB = "Вход по тренду на Buy";//комментарий ордера string comS = "Вход по тренду на Sell";//комментарий ордера double StochasticCAD;//положение основной линии Стохастики на текущем баре по USDCAD double StochasticAUD;//положение основной линии Стохастики на текущем баре по AUDUSD
double SARCAD;//текущее положение индикатора по USDCAD double SARСCAD;//положение индикатора бар назад по USDCAD double SARAUD;//текущее положение индикатора по AUDUSD double SARСAUD;//положение индикатора бар назад по AUDUSD
//______________________________поиск и закрытие ордеров_______________________________________
int i; for(i=0; i<=OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;// если ордер номер i не существует, прекращаем перебор
if (OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic) // если ордер не с этой пары, на которой стоит наш эксперт continue; // пропускаем его и смотрим на следующий за ним ордер
//_______закрытие Buy_______ if (OrderType() == OP_BUY && OrderProfit()>=Profit) // если ордер бай { OPB=1; if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//и рынок близок к развороту { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // закроем его, если он в профите OPB=0; } } else { //_______закрытие Sell_______ if(OrderType() == OP_SELL && OrderProfit()>=Profit)// если ордер селл {OPS=1; if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//и рынок близок к развороту { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); // закроем его, если он в профите OPS=0; } } } }
if(OPS > 1) Alert ("GBPUSD","Выставили ордер на продажу!");
} } return(0);//выход }
При тестировании ничего не выдает. Никаких результатов.
В журнале - набор ошибок:
Подскажите, что не так???
Для начала научитесь вставлять код в окно посредством одновременного нажатия кл "Контрл + Альт + М", дабы в вашей галиматье людям ориентироваться и давать рекомендации.
Кроме этого попробуйте дважды кликнуть мышкой на соответствующее сообщение об ошибке в журнале - возможно наведет на какие-нибудь мысли...
Для начала научитесь вставлять код в окно посредством одновременного нажатия кл "Конрл + Альт + М", дабы в вашей галиматье людям ориентироваться и давать рекомендации.
Кроме этого попробуйте дважды кликнуть мышкой на соответствующее сообщение об ошибке в журнале - возможно наведет на какие-нибудь мысли...
Ошибки в журнале тестера,а не компилятора... (на рисунке вообще-то видно, если сначала смотреть, а потом комментировать...). Двойной щелчок там ничего не дает...
int magic = 428;//магический номер экспертаexterndouble volume = 0.1;//объем выставляемого ордераexternint slippage = 3;//проскальзываниеint OPB;//метка выставляемого ордера на покупкуint OPS;//метка выставляемого ордера на продажуint Profit=1;//уровень профита открытых ордеровstring comB = "Вход по тренду на Buy";//комментарий ордераstring comS = "Вход по тренду на Sell";//комментарий ордераdouble StochasticCAD;//положение основной линии Стохастики на текущем баре по USDCADdouble StochasticAUD;//положение основной линии Стохастики на текущем баре по AUDUSDdouble SARCAD;//текущее положение индикатора по USDCADdouble SARСCAD;//положение индикатора бар назад по USDCADdouble SARAUD;//текущее положение индикатора по AUDUSDdouble SARСAUD;//положение индикатора бар назад по AUDUSDdouble bidCAD;
double askCAD;
double bidAUD;
double askAUD;
int start()
{
//______________________________определение значений переменных_______________________
StochasticCAD = iStochastic("USDCAD",30,5,3,3,1,1,0,0);
StochasticAUD = iStochastic("AUDUSD",30,5,3,3,1,1,1,0);
SARCAD=iSAR("USDCAD",30,0.02,0.2,0);
SARСCAD=iSAR("USDCAD",30,0.02,0.2,1);
SARAUD=iSAR("AUDUSD",30,0.02,0.2,0);
SARСAUD=iSAR("AUDUSD",30,0.02,0.2,1);
bidCAD =MarketInfo("USDCAD",MODE_BID);
askCAD =MarketInfo("USDCAD",MODE_ASK);
bidAUD =MarketInfo("AUDUSD",MODE_BID);
askAUD =MarketInfo("AUDUSD",MODE_ASK);
//______________________________поиск и закрытие ордеров_______________________________________ int i;
for(i=0; i<=OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;// если ордер номер i не существует, прекращаем переборif (OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic) // если ордер не с этой пары, на которой стоит наш экспертcontinue; // пропускаем его и смотрим на следующий за ним ордер//_______закрытие Buy_______ if (OrderType() == OP_BUY && OrderProfit()>=Profit)
// если ордер бай
{
OPB=1;
if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//и рынок близок к развороту
{
OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // закроем его, если он в профите
OPB=0;
}
}
else
{
//_______закрытие Sell_______ if(OrderType() == OP_SELL && OrderProfit()>=Profit)// если ордер селл
{OPS=1;
if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//и рынок близок к развороту
{
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); // закроем его, если он в профите
OPS=0;
}
}
}
}
//______________выставление ордеров______________________________________________________________________if (SARCAD>askCAD && SARСCAD<bidCAD && SARAUD<bidAUD && SARСAUD>askAUD && OPB<1)//определим условия
{ //_______Buy_______ if(!IsTradeAllowed())
{
Alert("занят торговый поток, повторим попытку бай...");
return(-1);
}
OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slippage,0,0,comB,magic,0,Red); //выставим ордерif(OPB == -1)
{
Alert("GBPUSD"," ошибка: бай", GetLastError());
return(-1);
}
if(OPB > 1)
Alert ("GBPUSD","Выставили ордер на покупку!");
}
else
{//_______Sell_______if (SARСCAD>askCAD && SARCAD<bidCAD && SARСAUD<bidAUD && SARAUD>askAUD && OPS<1)//определим условия
{
if(!IsTradeAllowed())
{
Alert("занят торговый поток, повторим попытку селл...");
return(-1);
}
OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slippage,0,0,comS,magic,0,Blue); //выставим ордерif(OPS == -1)
{
Alert("GBPUSD"," ошибка: селл", GetLastError());
return(-1);
}
if(OPS > 1)
Alert ("GBPUSD","Выставили ордер на продажу!");
}
}
return(0);//выход
}
А что такое ДЦ? И какие ограничения по другим инструментам?
ДЦ - Дилинговый центр
В тестере по другим инструментам можно получить только цену открытия на нулевом баре, тики по другим инструментам не моделируются, рыночное окружение практически недоступно.
Сделки по другим инструментам не открываются.
Если нужно корректно проводить мультивалютный анализ, то лучше пользоваться МТ5. Там есть мультивалютный тестер.
Почему скорость тестера падает к концу прохода третьего года ?
есть такая проблема - у меня тож такое было, если советник много сделок в год совершает - возможно много данных сохраняется для вывода итогового результата или может быть индикаторные буфера память съедают
в общем видел - не знаю, терпите - для общей картины тест за 10 лет,а оптимизировать лучше по одному году и потом делать выборку оптимальных параметров
Хочу проанализировать различные кросы с последующим выставление ордеров на другой паре:
int magic = 428;//магический номер эксперта
extern double volume = 0.1;//объем выставляемого ордера
extern int slippage = 3;//проскальзывание
int OPB;//метка выставляемого ордера на покупку
int OPS;//метка выставляемого ордера на продажу
int Profit=1;//уровень профита открытых ордеров
string comB = "Вход по тренду на Buy";//комментарий ордера
string comS = "Вход по тренду на Sell";//комментарий ордера
double StochasticCAD;//положение основной линии Стохастики на текущем баре по USDCAD
double StochasticAUD;//положение основной линии Стохастики на текущем баре по AUDUSD
double SARCAD;//текущее положение индикатора по USDCAD
double SARСCAD;//положение индикатора бар назад по USDCAD
double SARAUD;//текущее положение индикатора по AUDUSD
double SARСAUD;//положение индикатора бар назад по AUDUSD
int start()
{
//______________________________определение значений переменных_______________________
StochasticCAD = iStochastic("USDCAD",30,5,3,3,1,1,0,0);
StochasticAUD = iStochastic("AUDUSD",30,5,3,3,1,1,1,0);
SARCAD=iSAR("USDCAD",30,0.02,0.2,0);
SARСCAD=iSAR("USDCAD",30,0.02,0.2,1);
SARAUD=iSAR("AUDUSD",30,0.02,0.2,0);
SARСAUD=iSAR("AUDUSD",30,0.02,0.2,1);
double bidCAD =MarketInfo("USDCAD",MODE_BID);
double askCAD =MarketInfo("USDCAD",MODE_ASK);
double bidAUD =MarketInfo("AUDUSD",MODE_BID);
double askAUD =MarketInfo("AUDUSD",MODE_ASK);
//______________________________поиск и закрытие ордеров_______________________________________
int i;
for(i=0; i<=OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;// если ордер номер i не существует, прекращаем перебор
if (OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic) // если ордер не с этой пары, на которой стоит наш эксперт
continue; // пропускаем его и смотрим на следующий за ним ордер
//_______закрытие Buy_______
if (OrderType() == OP_BUY && OrderProfit()>=Profit)
// если ордер бай
{
OPB=1;
if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//и рынок близок к развороту
{
OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // закроем его, если он в профите
OPB=0;
}
}
else
{
//_______закрытие Sell_______
if(OrderType() == OP_SELL && OrderProfit()>=Profit)// если ордер селл
{OPS=1;
if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//и рынок близок к развороту
{
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); // закроем его, если он в профите
OPS=0;
}
}
}
}
//______________выставление ордеров______________________________________________________________________
if (SARCAD>askCAD && SARСCAD<bidCAD && SARAUD<bidAUD && SARСAUD>askAUD && OPB<1)//определим условия
{ //_______Buy_______
if(!IsTradeAllowed())
{
Alert("занят торговый поток, повторим попытку бай...");
return(-1);
}
OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slippage,0,0,comB,magic,0,Red); //выставим ордер
if(OPB == -1)
{
Alert("GBPUSD"," ошибка: бай", GetLastError());
return(-1);
}
if(OPB > 1)
Alert ("GBPUSD","Выставили ордер на покупку!");
}
else
{//_______Sell_______
if (SARСCAD>askCAD && SARCAD<bidCAD && SARСAUD<bidAUD && SARAUD>askAUD && OPS<1)//определим условия
{
if(!IsTradeAllowed())
{
Alert("занят торговый поток, повторим попытку селл...");
return(-1);
}
OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slippage,0,0,comS,magic,0,Blue); //выставим ордер
if(OPS == -1)
{
Alert("GBPUSD"," ошибка: селл", GetLastError());
return(-1);
}
if(OPS > 1)
Alert ("GBPUSD","Выставили ордер на продажу!");
}
}
return(0);//выход
}
При тестировании ничего не выдает. Никаких результатов.
В журнале - набор ошибок:
Подскажите, что не так???
Хочу проанализировать различные кросы с последующим выставление ордеров на другой паре:
int magic = 428;//магический номер эксперта
extern double volume = 0.1;//объем выставляемого ордера
extern int slippage = 3;//проскальзывание
int OPB;//метка выставляемого ордера на покупку
int OPS;//метка выставляемого ордера на продажу
int Profit=1;//уровень профита открытых ордеров
string comB = "Вход по тренду на Buy";//комментарий ордера
string comS = "Вход по тренду на Sell";//комментарий ордера
double StochasticCAD;//положение основной линии Стохастики на текущем баре по USDCAD
double StochasticAUD;//положение основной линии Стохастики на текущем баре по AUDUSD
double SARCAD;//текущее положение индикатора по USDCAD
double SARСCAD;//положение индикатора бар назад по USDCAD
double SARAUD;//текущее положение индикатора по AUDUSD
double SARСAUD;//положение индикатора бар назад по AUDUSD
int start()
{
//______________________________определение значений переменных_______________________
StochasticCAD = iStochastic("USDCAD",30,5,3,3,1,1,0,0);
StochasticAUD = iStochastic("AUDUSD",30,5,3,3,1,1,1,0);
SARCAD=iSAR("USDCAD",30,0.02,0.2,0);
SARСCAD=iSAR("USDCAD",30,0.02,0.2,1);
SARAUD=iSAR("AUDUSD",30,0.02,0.2,0);
SARСAUD=iSAR("AUDUSD",30,0.02,0.2,1);
double bidCAD =MarketInfo("USDCAD",MODE_BID);
double askCAD =MarketInfo("USDCAD",MODE_ASK);
double bidAUD =MarketInfo("AUDUSD",MODE_BID);
double askAUD =MarketInfo("AUDUSD",MODE_ASK);
//______________________________поиск и закрытие ордеров_______________________________________
int i;
for(i=0; i<=OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
break;// если ордер номер i не существует, прекращаем перебор
if (OrderSymbol() != "GBPUSD" || OrderMagicNumber() != magic) // если ордер не с этой пары, на которой стоит наш эксперт
continue; // пропускаем его и смотрим на следующий за ним ордер
//_______закрытие Buy_______
if (OrderType() == OP_BUY && OrderProfit()>=Profit)
// если ордер бай
{
OPB=1;
if(StochasticCAD==0 || StochasticAUD==100 || SARCAD<bidCAD || SARAUD>askAUD)//и рынок близок к развороту
{
OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Wheat); // закроем его, если он в профите
OPB=0;
}
}
else
{
//_______закрытие Sell_______
if(OrderType() == OP_SELL && OrderProfit()>=Profit)// если ордер селл
{OPS=1;
if(StochasticCAD==100 || StochasticAUD==0 || SARCAD>askCAD || SARAUD<bidAUD)//и рынок близок к развороту
{
OrderClose(OrderTicket(),OrderLots(),Ask,slippage,PaleTurquoise); // закроем его, если он в профите
OPS=0;
}
}
}
}
//______________выставление ордеров______________________________________________________________________
if (SARCAD>askCAD && SARСCAD<bidCAD && SARAUD<bidAUD && SARСAUD>askAUD && OPB<1)//определим условия
{ //_______Buy_______
if(!IsTradeAllowed())
{
Alert("занят торговый поток, повторим попытку бай...");
return(-1);
}
OPB =OrderSend("GBPUSD",OP_BUY,volume,Ask,slippage,0,0,comB,magic,0,Red); //выставим ордер
if(OPB == -1)
{
Alert("GBPUSD"," ошибка: бай", GetLastError());
return(-1);
}
if(OPB > 1)
Alert ("GBPUSD","Выставили ордер на покупку!");
}
else
{//_______Sell_______
if (SARСCAD>askCAD && SARCAD<bidCAD && SARСAUD<bidAUD && SARAUD>askAUD && OPS<1)//определим условия
{
if(!IsTradeAllowed())
{
Alert("занят торговый поток, повторим попытку селл...");
return(-1);
}
OPS=OrderSend("GBPUSD",OP_SELL,volume,Bid,slippage,0,0,comS,magic,0,Blue); //выставим ордер
if(OPS == -1)
{
Alert("GBPUSD"," ошибка: селл", GetLastError());
return(-1);
}
if(OPS > 1)
Alert ("GBPUSD","Выставили ордер на продажу!");
}
}
return(0);//выход
}
При тестировании ничего не выдает. Никаких результатов.
В журнале - набор ошибок:
Подскажите, что не так???
Для начала научитесь вставлять код в окно посредством одновременного нажатия кл "Контрл + Альт + М", дабы в вашей галиматье людям ориентироваться и давать рекомендации.
Кроме этого попробуйте дважды кликнуть мышкой на соответствующее сообщение об ошибке в журнале - возможно наведет на какие-нибудь мысли...
Для начала научитесь вставлять код в окно посредством одновременного нажатия кл "Конрл + Альт + М", дабы в вашей галиматье людям ориентироваться и давать рекомендации.
Кроме этого попробуйте дважды кликнуть мышкой на соответствующее сообщение об ошибке в журнале - возможно наведет на какие-нибудь мысли...
Ошибки в журнале тестера,а не компилятора... (на рисунке вообще-то видно, если сначала смотреть, а потом комментировать...). Двойной щелчок там ничего не дает...
Тест по всем тикам? Проблемы с историей
Тест по всем тикам? Проблемы с историей
Т.е. нужно перегрузить историю по всем парам, участвующим в анализе?
Т.е. нужно перегрузить историю по всем парам, участвующим в анализе?
Возможно. Если конечно ДЦ это поддерживает.
Только стоит не забывать что в тестере можно открывать позиции по текущему инструменту, и есть ряд ограничений по другим инструментам
Возможно. Если конечно ДЦ это поддерживает.
Только стоит не забывать что в тестере можно открывать позиции по текущему инструменту, и есть ряд ограничений по другим инструментам
А что такое ДЦ? И какие ограничения по другим инструментам?
А что такое ДЦ? И какие ограничения по другим инструментам?
ДЦ - Дилинговый центр
В тестере по другим инструментам можно получить только цену открытия на нулевом баре, тики по другим инструментам не моделируются, рыночное окружение практически недоступно.
Сделки по другим инструментам не открываются.
Если нужно корректно проводить мультивалютный анализ, то лучше пользоваться МТ5. Там есть мультивалютный тестер.