вопрос задаете с подвохом.
варианты ответов такие же
1. не отличется
2. отличается.
потому как все зависит от ваших алгоритмов.
Подвоха нет. Я ищу причину того, почему тесты на MT5 проходят, как ожидается, а на реальном времени не всё отрабатывается. Просто не знаю с какой стороны подойти, и как по-другому задать вопрос.
Подвоха нет. Я ищу причину того, почему тесты на MT5 проходят, как ожидается, а на реальном времени не всё отрабатывается. Просто не знаю с какой стороны подойти, и как по-другому задать вопрос.
Программа отрабатывается до строчки Print("Вход в рынок");
А строка Print("Ожидание входа в рынок перенесено на следующие сутки"); не отрабатывается, и ниже тоже не отрабатывается.
#define TIME_DIFFERENCE 0
//////////////////////////////////////////////////////////////////////
//для московского времени 0
///////////////////////////////////////////////////////////////////////
#define STOPLOSS 7000
///////////////////////////////////////////////////////////////////////
//STOPLOSS - переменная для stop loss в пунктах
//////////////////////////////////////////////////////////////////////
#define CHECK_TIME 22
///////////////////////////////////////////////////////////////////////
//время, когда надо проверять свечи в 10 и 11 часов
//////////////////////////////////////////////////////////////////////
int OnInit()
{
return(0);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
MqlDateTime time_cur;
MqlRates rates[];
MqlTradeRequest request;
MqlTradeResult result;
MqlTick prices;
TimeCurrent(time_cur);
SymbolInfoTick(Symbol(), prices);
ArraySetAsSeries(rates,true);
CopyRates (Symbol(), 0, 0, 22, rates);
//rates[CHECK_TIME-11] - в 11
//rates[CHECK_TIME-10] - в 10
if (!GlobalVariableCheck("price_save")) GlobalVariableSet("price_save", 0.0);
if (!GlobalVariableCheck("signal1")) GlobalVariableSet("signal1", 0);
if (!GlobalVariableCheck("signal2")) GlobalVariableSet("signal2", 0);
request.action = TRADE_ACTION_DEAL;
request.symbol = Symbol();
request.deviation = 5;
request.type_filling = ORDER_FILLING_AON;
request.type_time = ORDER_TIME_GTC;
if ((time_cur.hour == CHECK_TIME-TIME_DIFFERENCE) && (time_cur.min == 0) && (time_cur.sec == 0) && (GlobalVariableGet("signal1") == 0))
{
printf("%d.00", time_cur.hour);
if (PositionsTotal() == 0)
{
if ((rates[CHECK_TIME-10].open < rates[CHECK_TIME-10].close) && (rates[CHECK_TIME-11].open > rates[CHECK_TIME-11].close))
{
request.type = ORDER_TYPE_SELL;
request.price = prices.bid;
request.sl = prices.bid + STOPLOSS*SymbolInfoDouble(Symbol(), SYMBOL_POINT);
request.tp = 0.0;
request.volume = 0.1*MathFloor(10*AccountInfoDouble(ACCOUNT_BALANCE)*13/100000);
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
GlobalVariableSet("balance_save", AccountInfoDouble(ACCOUNT_BALANCE));
GlobalVariableSet("price_save", request.price);
OrderSend(request, result);
while ((result.retcode == TRADE_RETCODE_PRICE_CHANGED) || (result.retcode == TRADE_RETCODE_REQUOTE) || (result.retcode == TRADE_RETCODE_REJECT) || (result.retcode == TRADE_RETCODE_CANCEL) || (result.retcode == TRADE_RETCODE_CONNECTION))
{
SymbolInfoTick(Symbol(), prices);
request.price = prices.bid;
request.sl = prices.bid + STOPLOSS*SymbolInfoDouble(Symbol(), SYMBOL_POINT);
GlobalVariableSet("price_save", request.price);
OrderSend(request, result);
}
Print("Вход в рынок");
}
else Print("Ожидание входа в рынок перенесено на следующие сутки");
}
else Print("Есть незакрытая позиция");
GlobalVariableSet("signal1", 1);
}
if ((time_cur.hour == CHECK_TIME-TIME_DIFFERENCE) && (time_cur.min == 1) && (time_cur.sec == 0)) GlobalVariableSet("signal1", 0);
if ((time_cur.hour == CHECK_TIME+1-TIME_DIFFERENCE) && (time_cur.min == 0) && (time_cur.sec == 0) && (GlobalVariableGet("signal2") == 0) && (PositionsTotal() > 0))
{
if (rates[1].open > rates[1].close)
{
PositionSelect(Symbol());
request.type = ORDER_TYPE_BUY;
request.price = prices.ask;
request.volume = PositionGetDouble(POSITION_VOLUME);
request.sl = 0.0;
request.tp = 0.0;
OrderSend(request, result);
while ((result.retcode == TRADE_RETCODE_PRICE_CHANGED) || (result.retcode == TRADE_RETCODE_REQUOTE) || (result.retcode == TRADE_RETCODE_REJECT) || (result.retcode == TRADE_RETCODE_CANCEL) || (result.retcode == TRADE_RETCODE_CONNECTION))
{
SymbolInfoTick(Symbol(), prices);
request.price = prices.ask;
request.sl = 0.0;
request.tp = 0.0;
OrderSend(request, result);
}
Print("Позиция закрыта. TP");
Print("Текущий баланс = ", AccountInfoDouble(ACCOUNT_BALANCE));
}
else GlobalVariableSet("signal2", 1);
}
if ((GlobalVariableGet("signal2") == 1) && (prices.ask <= (GlobalVariableGet("price_save") - 0.00020)) && (PositionsTotal() > 0))
{
PositionSelect(Symbol());
request.type = ORDER_TYPE_BUY;
request.price = prices.ask;
request.volume = PositionGetDouble(POSITION_VOLUME);
request.sl = 0.0;
request.tp = 0.0;
OrderSend(request, result);
while ((result.retcode == TRADE_RETCODE_PRICE_CHANGED) || (result.retcode == TRADE_RETCODE_REQUOTE) || (result.retcode == TRADE_RETCODE_REJECT) || (result.retcode == TRADE_RETCODE_CANCEL) || (result.retcode == TRADE_RETCODE_CONNECTION))
{
SymbolInfoTick(Symbol(), prices);
request.price = prices.ask;
request.sl = 0.0;
request.tp = 0.0;
OrderSend(request, result);
}
Print("Позиция закрыта. SL");
Print("Текущий баланс = ", AccountInfoDouble(ACCOUNT_BALANCE));
GlobalVariableSet("signal2", 0);
}
}
- www.mql5.com
Советник писался не мной, но по моей стратегии. Поэтому в тонкостях программирования ничего не понимаю. Что за кнопочка SRC? И что делать с отклонением в 5 пунктов?
И что делать с отклонением в 5 пунктов?
Найдите в коде строчку со словом deviation и поставьте вместо 5 значение 50. Видимо, код создавался без учёта 5-значных котировок.
SRC - это в верхней панели диалогового окошка. Помогает разместить на форуме код в формате, удобном для чтения.
Советник писался не мной, но по моей стратегии. Поэтому в тонкостях программирования ничего не понимаю. Что за кнопочка SRC? И что делать с отклонением в 5 пунктов?
С кнопкой и отклонением, я думаю, вы и сами разберетесь.
А мой совет - отказаться от советника, максимальная и абсолютная просадка по средствам которого достигает уровня первоначального депозита (см. картинку).
Найдите в коде строчку со словом deviation и поставьте вместо 5 значение 50. Видимо, код создавался без учёта 5-значных котировок.
Т.е. "5" - это изменение цены пока идет запрос с терминала на сервер в пунктах?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Господа!
У меня имеется советник, который проводит тест стратегии на Metatrader5. Но, если его запустить на демо-счете, он работает некорректно. Отличаются ли условия для советника: на тестере, на раельном счете и на демо-счете?