Не пользуемся, должно быть, потому, что не знаем про коды завершения работы инита. Примеры в учебнике отличаются от формы в редакторе. Функция int start(), например, там отсутствует. Когда я запихал в инит пример простого советника из учебника, то он, почему-то, работал. А что бы не писал я - ничего не получалось. Вот я и решил, спустя две недели опытов, обратиться к специалистам. Спасибо за совет!
Закинул все это в ОнТик, но ничего не изменилось.
Забудьте учебник, он по старому синтаксису написан, с тех пор многое изменилось. Справка из поставки терминала - наиболее актуальна, да и кодобаза, если поискать, тоже источник примеров на новой версии MQL.
А насчёт не писать весь код в ините, так это было и раньше, поискать по форуму, так сотни постов наберётся на всех языках этого форума, просто каждый раз находится новый писатель, который не читатель ;)
Забудьте учебник, он по старому синтаксису написан, с тех пор многое изменилось. Справка из поставки терминала - наиболее актуальна, да и кодобаза, если поискать, тоже источник примеров на новой версии MQL.
А насчёт не писать весь код в ините, так это было и раньше, поискать по форуму, так сотни постов наберётся на всех языках этого форума, просто каждый раз находится новый писатель, который не читатель ;)
Спасибо!
Старые учебники, при потере актуальности, нужно сразу же скуривать))
Старые учебники, при потере актуальности, нужно сразу же скуривать))
И не надо ВСЁ в ОнТик кидать, только то, что относится к торговле, часть кода, которая срабатывает только при запуске нужно оставить в ОнИнит (понятно, что названия функций латиницей надо писать, просто лень раскладку менять на форуме каждый раз).
Насчёт самого кода, есть вопросы по циклу, странный он какой-то, по-моему там фигурных скобок не хватает...
Да, и ещё расчёт уровней профита и убытка, неправильно они прописаны. Серверу надо передавать цену, желательно нормализованную, а не значение в пипсах.
И не надо ВСЁ в ОнТик кидать, только то, что относится к торговле, часть кода, которая срабатывает только при запуске нужно оставить в ОнИнит (понятно, что названия функций латиницей надо писать, просто лень раскладку менять на форуме каждый раз).
Насчёт самого кода, есть вопросы по циклу, странный он какой-то, по-моему там фигурных скобок не хватает...
Да, и ещё расчёт уровней профита и убытка, неправильно они прописаны. Серверу надо передавать цену, желательно нормализованную, а не значение в пипсах.
Все понял, спс. Скобки проверю - ошибок редактор не выдавал.
Почему же пример из книги работал..? Я сносил все функции и вставлял только код примера, начиная с инт старт. Ошибок не было, сделки открывались.
Все понял, спс. Скобки проверю - ошибок редактор не выдавал.
Почему же пример из книги работал..? Я сносил все функции и вставлял только код примера, начиная с инт старт. Ошибок не было, сделки открывались.
Ну так то, что работало не надо было торгать )))
А инт старт по-старому и есть ОнТик по-новому для советников, вот и надо было перенести всё из старт в ОнТик. Вернее в вашем случае, из ОнИнит в ОнТик.
Компилятор отслеживает ошибки синтаксиса, логику не проверит никто, кроме человека. В особых случаях даже автор кода может запутаться :)
А инт старт по-старому и есть ОнТик по-новому для советников, вот и надо было перенести всё из старт в ОнТик. Вернее в вашем случае, из ОнИнит в ОнТик.
Компилятор отслеживает ошибки синтаксиса, логику не проверит никто, кроме человека. В особых случаях даже автор кода может запутаться :)
"Ну так то, что работало не надо было торгать )))" Ну, дык, жыш, хочется самому что-нибудь накорябать )))
Пациент не пришел в себя после манипуляций
Ну так логика и математика хромает, понятно, что не будет так работать.
Вот, например, зачем в этом советнике цикл? То есть зачем, понятно, нужно посчитать, сколько ордеров по данному символу и магику уже есть, так? Но что мы видим тут, цикл-то ничего е считает, да и посчитать не может, так как "счётчик" ему не вкрутили )))
Total=0;
for( pos=1; pos<=OrdersTotal(); pos++)
pos=OrderSelect(pos-1,MODE_TRADES); И что дальше? Переменная pos всегда или 0, или 1, цикл сбивается постоянно на начало, а то и заглючить может и превратиться в бесконечный цикл.
OrderSelect() возвращает булево значение, истина или ложь, что никак не подходит для переменной pos. Да и цикл лучше считать от самого старого ордера, то есть в обратном порядке, чтобы не пропускать ордера.
Тут явно пригодилась бы переменная Total в качестве счётчика:
for(pos=OrdersTotal()-1;pos>=0;pos--)
{
if(OrderSelect(pos,MODE_TRADES)) //Обязательно проверить, выбран ли ордер
{
if(OrderSymbol()==Symbol()) //желательно проверить, тот ли это ордер по символу, ещё можно по магику проверить дополнительно в этой же строке
{
Total++; //если это наш ордер, добавляем счётчику единицу
}
}
}
if(Total<1)
{
торгуем
}
Убрал лишнее, добавил вывод ошибки после OrderSend, для тестера на не-ECN счетах уже ордера открывает:
#property version"1.00"#property strictexternint MA_1=5;
externint MA_2=20;
externint MA_3=80;
externint TP=100;
externint SL=50;
externdouble Lot=0.1;
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
double MA_1_t=0;
double MA_2_t=0;
double MA_3_t=0;
int Total=0;
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
if(OrderSelect(pos,MODE_TRADES)) //Обязательно проверить, выбран ли ордер
{
if(OrderSymbol()==Symbol()) //желательно проверить, тот ли это ордер по символу, ещё можно по магику проверить дополнительно в этой же строке
{
Total++; //если это наш ордер, добавляем счётчику единицу
}
}
}
if(Total<1)
{
MA_1_t=iMA(NULL,0,MA_1,0,MODE_EMA,PRICE_CLOSE,0);
MA_2_t=iMA(NULL,0,MA_2,0,MODE_EMA,PRICE_CLOSE,0);
MA_3_t=iMA(NULL,0,MA_3,0,MODE_EMA,PRICE_CLOSE,0);
if(MA_2_t>MA_3_t&&MA_1_t<MA_2_t&&Open[1]<MA_1_t&&Close[1]>MA_1_t)
{
double stoploss=NormalizeDouble(Ask-SL*Point,Digits);
double takeprofit=NormalizeDouble(Ask+TP*Point,Digits);
if(OrderSend(Symbol(),OP_BUY,Lot,Ask,6,stoploss,takeprofit,"My order buy",16384,0,clrGreen)<1)
Print("OrderSend error #",_LastError," BuySL=",stoploss," BuyTP=",takeprofit);
}
if(MA_2_t<MA_3_t&&MA_1_t>MA_2_t&&Open[1]>MA_1_t&&Close[1]<MA_1_t)
{
double stoploss=NormalizeDouble(Bid+SL*Point,Digits);
double takeprofit=NormalizeDouble(Bid-TP*Point,Digits);
if(OrderSend(Symbol(),OP_SELL,Lot,Bid,6,stoploss,takeprofit,"My order sell",16384,0,clrRed)<1)
Print("OrderSend error #",_LastError," Sell SL=",stoploss," Sell TP=",takeprofit);
}
}
}
А, да, ещё расчёт уровня СЛ для продаж был неправильный, внимательней нужно быть.
Ну так логика и математика хромает, понятно, что не будет так работать.
Вот, например, зачем в этом советнике цикл? То есть зачем, понятно, нужно посчитать, сколько ордеров по данному символу и магику уже есть, так? Но что мы видим тут, цикл-то ничего е считает, да и посчитать не может, так как "счётчик" ему не вкрутили )))
OrderSelect() возвращает булево значение, истина или ложь, что никак не подходит для переменной pos. Да и цикл лучше считать от самого старого ордера, то есть в обратном порядке, чтобы не пропускать ордера.
Тут явно пригодилась бы переменная Total в качестве счётчика:
Убрал лишнее, добавил вывод ошибки после OrderSend, для тестера на не-ECN счетах уже ордера открывает:
А, да, ещё расчёт уровня СЛ для продаж был неправильный, внимательней нужно быть.
Ого!!! Спасибо! Это требует осмысления.
Может где-нибудь есть "самоучитель" по новым правилам? 4-х значный номер страницы немного напрягает...
Может где-нибудь есть "самоучитель" по новым правилам? 4-х значный номер страницы немного напрягает...
А кому щас легко... В архиве ещё 5 таких тем про новичков )))
Если честно, примеров из справки и кодобазы вполне достаточно, если уже есть опыт программирования, желательно на С++. Если опыта совсем нет, тогда можно поизучать учебник С++ сначала, MQL очень похож по синтаксису.
А кому щас легко... В архиве ещё 5 таких тем про новичков )))
Если честно, примеров из справки и кодобазы вполне достаточно, если уже есть опыт программирования, желательно на С++. Если опыта совсем нет, тогда можно поизучать учебник С++ сначала, MQL очень похож по синтаксису.
Не пользуемся, должно быть, потому, что не знаем про коды завершения работы инита. Примеры в учебнике отличаются от формы в редакторе. Функция int start(), например, там отсутствует. Когда я запихал в инит пример простого советника из учебника, то он, почему-то, работал. А что бы не писал я - ничего не получалось. Вот я и решил, спустя две недели опытов, обратиться к специалистам. Спасибо за совет!
Закинул все это в ОнТик, но ничего не изменилось.
Забудьте учебник, он по старому синтаксису написан, с тех пор многое изменилось. Справка из поставки терминала - наиболее актуальна, да и кодобаза, если поискать, тоже источник примеров на новой версии MQL.
А насчёт не писать весь код в ините, так это было и раньше, поискать по форуму, так сотни постов наберётся на всех языках этого форума, просто каждый раз находится новый писатель, который не читатель ;)
Забудьте учебник, он по старому синтаксису написан, с тех пор многое изменилось. Справка из поставки терминала - наиболее актуальна, да и кодобаза, если поискать, тоже источник примеров на новой версии MQL.
А насчёт не писать весь код в ините, так это было и раньше, поискать по форуму, так сотни постов наберётся на всех языках этого форума, просто каждый раз находится новый писатель, который не читатель ;)
Спасибо!
Старые учебники, при потере актуальности, нужно сразу же скуривать))
Спасибо!
Старые учебники, при потере актуальности, нужно сразу же скуривать))
И не надо ВСЁ в ОнТик кидать, только то, что относится к торговле, часть кода, которая срабатывает только при запуске нужно оставить в ОнИнит (понятно, что названия функций латиницей надо писать, просто лень раскладку менять на форуме каждый раз).
Насчёт самого кода, есть вопросы по циклу, странный он какой-то, по-моему там фигурных скобок не хватает...
Да, и ещё расчёт уровней профита и убытка, неправильно они прописаны. Серверу надо передавать цену, желательно нормализованную, а не значение в пипсах.
И не надо ВСЁ в ОнТик кидать, только то, что относится к торговле, часть кода, которая срабатывает только при запуске нужно оставить в ОнИнит (понятно, что названия функций латиницей надо писать, просто лень раскладку менять на форуме каждый раз).
Насчёт самого кода, есть вопросы по циклу, странный он какой-то, по-моему там фигурных скобок не хватает...
Да, и ещё расчёт уровней профита и убытка, неправильно они прописаны. Серверу надо передавать цену, желательно нормализованную, а не значение в пипсах.
Все понял, спс. Скобки проверю - ошибок редактор не выдавал.
Почему же пример из книги работал..? Я сносил все функции и вставлял только код примера, начиная с инт старт. Ошибок не было, сделки открывались.
Все понял, спс. Скобки проверю - ошибок редактор не выдавал.
Почему же пример из книги работал..? Я сносил все функции и вставлял только код примера, начиная с инт старт. Ошибок не было, сделки открывались.
Ну так то, что работало не надо было торгать )))
А инт старт по-старому и есть ОнТик по-новому для советников, вот и надо было перенести всё из старт в ОнТик. Вернее в вашем случае, из ОнИнит в ОнТик.
Компилятор отслеживает ошибки синтаксиса, логику не проверит никто, кроме человека. В особых случаях даже автор кода может запутаться :)
Ну так то, что работало не надо было торгать )))
А инт старт по-старому и есть ОнТик по-новому для советников, вот и надо было перенести всё из старт в ОнТик. Вернее в вашем случае, из ОнИнит в ОнТик.
Компилятор отслеживает ошибки синтаксиса, логику не проверит никто, кроме человека. В особых случаях даже автор кода может запутаться :)
//+------------------------------------------------------------------+
"Ну так то, что работало не надо было торгать )))" Ну, дык, жыш, хочется самому что-нибудь накорябать )))
Пациент не пришел в себя после манипуляций
"Ну так то, что работало не надо было торгать )))" Ну, дык, жыш, хочется самому что-нибудь накорябать )))
Пациент не пришел в себя после манипуляций
Ну так логика и математика хромает, понятно, что не будет так работать.
Вот, например, зачем в этом советнике цикл? То есть зачем, понятно, нужно посчитать, сколько ордеров по данному символу и магику уже есть, так? Но что мы видим тут, цикл-то ничего е считает, да и посчитать не может, так как "счётчик" ему не вкрутили )))
OrderSelect() возвращает булево значение, истина или ложь, что никак не подходит для переменной pos. Да и цикл лучше считать от самого старого ордера, то есть в обратном порядке, чтобы не пропускать ордера.
Тут явно пригодилась бы переменная Total в качестве счётчика:
Убрал лишнее, добавил вывод ошибки после OrderSend, для тестера на не-ECN счетах уже ордера открывает:
А, да, ещё расчёт уровня СЛ для продаж был неправильный, внимательней нужно быть.
Ну так логика и математика хромает, понятно, что не будет так работать.
Вот, например, зачем в этом советнике цикл? То есть зачем, понятно, нужно посчитать, сколько ордеров по данному символу и магику уже есть, так? Но что мы видим тут, цикл-то ничего е считает, да и посчитать не может, так как "счётчик" ему не вкрутили )))
OrderSelect() возвращает булево значение, истина или ложь, что никак не подходит для переменной pos. Да и цикл лучше считать от самого старого ордера, то есть в обратном порядке, чтобы не пропускать ордера.
Тут явно пригодилась бы переменная Total в качестве счётчика:
Убрал лишнее, добавил вывод ошибки после OrderSend, для тестера на не-ECN счетах уже ордера открывает:
А, да, ещё расчёт уровня СЛ для продаж был неправильный, внимательней нужно быть.
Ого!!! Спасибо! Это требует осмысления.
Может где-нибудь есть "самоучитель" по новым правилам? 4-х значный номер страницы немного напрягает...
Ого!!! Спасибо! Это требует осмысления.
Может где-нибудь есть "самоучитель" по новым правилам? 4-х значный номер страницы немного напрягает...
А кому щас легко... В архиве ещё 5 таких тем про новичков )))
Если честно, примеров из справки и кодобазы вполне достаточно, если уже есть опыт программирования, желательно на С++. Если опыта совсем нет, тогда можно поизучать учебник С++ сначала, MQL очень похож по синтаксису.
А кому щас легко... В архиве ещё 5 таких тем про новичков )))
Если честно, примеров из справки и кодобазы вполне достаточно, если уже есть опыт программирования, желательно на С++. Если опыта совсем нет, тогда можно поизучать учебник С++ сначала, MQL очень похож по синтаксису.
string Опыта нет = учебник С++; )))
Благодарю вас за помощь!