Здравствуйте! Нужна помощь:
Начал учится, что бы понять что к чему написал первого простейшего советника на основе стохастика. Скомпилировал, ошибок нет, запустил тест - работает. Пока курил комп самопроизвольно перезагрузился (что у меня случается примерно раз-два в неделю), после чего советник перестал вообще выставлять ордера, хотя в коде ничего не изменилось о_О. Прошерстил форум, погуглил, к сожалению, ничего подобного не нашёл. В чём может быть проблема? Прошу помочь. (Другие советники при этом работают нормально).
Код:
while(signal==0)//Поиск сигнала { ss1=iStochastic(Symbol(),period,Kperiod1,Dperiod1,slowing1,ma_method1,sposob1,MODE_MAIN,1); if(ss1>LimitUp) { signal=1; return(0); } if(ss1<LimitDn) { signal=2; return(0); } return(0); }
Зачем этот поиск сигнала сделан в цикле? Функция Start() и так выполняется каждый тик.
И не надо использовать свой счетчик ордеров для этого существует стандартная функция OrdersTotal().
Зачем этот поиск сигнала сделан в цикле? Функция Start() и так выполняется каждый тик.
И не надо использовать свой счетчик ордеров для этого существует стандартная функция OrdersTotal().
Согласен. Спасибо за Ваш ответ. Проблему правда это не решило.
Код подправил:
//+------------------------------------------------------------------+ //| ProbaSil_1.0.mq4 | //| Ardov | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "Ardov" #property link "http://www.mql4.com" #property version "1.00" #property strict //Настройки extern int TP=20; //Тейк-профит extern int SL=10; //Стоп-лосс extern double Lots=0.1; //Размер лота extern int MxOrder=3; //Максимальное число ордеров extern int period=1; //Таймфрейм extern int Kperiod1=5; //К-период extern int Dperiod1=5; //Д-период extern int slowing1=1; //Замедление extern int ma_method1=3; //тип сглаживания extern int sposob1=1; //способ расчета стохастика(1 вроде экспоненциальный) extern int timeout=5; //Пауза между ордерами в минутах extern double LimitUp=80; //Верхний сигнальный уровень extern double LimitDn=20; //Нижний сигнальный уровень //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ int start() { int signal=0; //Торговый сигнал double ss1=0; //Сигнал стохастика double p=Point; //Размер пункта while(OrdersTotal()<MxOrder)//Если число ордеров, не превышает максимума { ss1=iStochastic(Symbol(),period,Kperiod1,Dperiod1,slowing1,ma_method1,sposob1,MODE_MAIN,1); if(ss1>LimitUp) { signal=1; return(0); } if(ss1<LimitDn) { signal=2; return(0); } ////Выставление ордеров if(signal == 1) { OrderSend(NULL,OP_BUY,Lots,Ask,1,(Ask-SL*p),(Ask+TP*p),"BUY",0,0,Blue); signal=0; Sleep(timeout*60000); return(0); } if(signal == 2) { OrderSend(NULL,OP_SELL,Lots,Bid,1,(Bid+SL*p),(Bid-TP*p),"SELL",0,0,Red); signal=0; Sleep(timeout*60000); return(0); } } return(0); }
int start() { int signal=0; //Торговый сигнал double ss1=0; //Сигнал стохастика double p=Point; //Размер пункта if(OrdersTotal()<MxOrder)//Если число ордеров, не превышает максимума { ss1=iStochastic(Symbol(),period,Kperiod1,Dperiod1,slowing1,ma_method1,sposob1,MODE_MAIN,1); if(ss1>LimitUp) { signal=1; //return(0); } if(ss1<LimitDn) { signal=2; //return(0); } ////Выставление ордеров if(signal == 1) { OrderSend(NULL,OP_BUY,Lots,Ask,1,(Ask-SL*p),(Ask+TP*p),"BUY",0,0,Blue); signal=0; Sleep(timeout*60000); return(0); } if(signal == 2) { OrderSend(NULL,OP_SELL,Lots,Bid,1,(Bid+SL*p),(Bid-TP*p),"SELL",0,0,Red); signal=0; Sleep(timeout*60000); return(0); } } return(0); }
?
Согласен. Спасибо за Ваш ответ. Проблему правда это не решило.
Код подправил:
//-------------------------------------------------------------------- // callstohastic.mq4 // Предназначен для использования в качестве примера в учебнике MQL4. //-------------------------------------------------------------------- int start() // Спец. функция start { double M_0, M_1, // Значение MAIN на 0 и 1 барах S_0, S_1; // Значение SIGNAL на 0 и 1барах //-------------------------------------------------------------------- // Обращение к функции техн.индикат. M_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 0);// 0 бар M_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN, 1);// 1 бар S_0 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);// 0 бар S_1 = iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_SIGNAL,1);// 1 бар //-------------------------------------------------------------------- // Анализ ситуации if( M_1 < S_1 && M_0 >= S_0 ) // Зеленая пересекает красную снизу Alert("Пересечение снизу вверх. ПОКУПКА."); // Сообщение if( M_1 > S_1 && M_0 <= S_0 ) // Зеленая пересекает красную свеху Alert("Пересечение сверху вниз. ПРОДАЖА."); // Сообщение if( M_1 > S_1 && M_0 > S_0 ) // Зелёная выше красной Alert("Продолжаем держать покупку."); // Сообщение if( M_1 < S_1 && M_0 < S_0 ) // Зелёная ниже красной Alert("Продолжаем держать продажу."); // Сообщение //-------------------------------------------------------------------- return; // Выход из start() } //--------------------------------------------------------------------
- book.mql4.com
?
ENSED, while на if пробовал менять - та же беда. Мб дело в самом терминале?
Обратите внимание, что я ещё два return(0) закомментировал.
У Вас когда сигнал (корректность определения сигнала - отдельный разговор, посмотрите как это сделано в примере Выше) обнаруживается - происходит в этих местах выход из функции. Следовательно, выполнение программы никогда не дойдёт до открытия ордеров.
ENSED, Спасибо за совет, но мне нужен именно сигнал по 1 основной линии стохастика
Ретурны удалил, но та же беда...
ENSED, Спасибо за совет, но мне нужен именно сигнал по 1 основной линии стохастика
Ретурны удалил, но та же беда...
Брр, полез запускать.
Удалите это:
void OnTick() { //--- }
А лучше перенесите сюда код из start()...
После этого должно "заработать" - будут Вам сделки. Про сигнал, количество сделок и вообще концепцию советника - думайте сами :)

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте! Нужна помощь:
Начал учится, что бы понять что к чему написал первого простейшего советника на основе стохастика. Скомпилировал, ошибок нет, запустил тест - работает. Пока курил комп самопроизвольно перезагрузился (что у меня случается примерно раз-два в неделю), после чего советник перестал вообще выставлять ордера, хотя в коде ничего не изменилось о_О. Прошерстил форум, погуглил, к сожалению, ничего подобного не нашёл. В чём может быть проблема? Прошу помочь. (Другие советники при этом работают нормально).
Код: