Уважаемые Программисты не проходите мимо, помогите исправить ошибку!
Вставил в советник исполнение звукового сигнала при открытии, закрытии, изменении, закрытии по стоплоссу и ошибке.
Всё работает прекрасно, кроме закрытия по стоплоссу, видимо я не туда вставил воспроизведение звука и так как я не очень в этом понимаю прошу Вашей помощи.
Весь код выкладывать нет смысла, покажу часть где по моему мнению должен воспроизводиться звук.
Итак, есть счётчик открытых позиций и мне кажется, что где то в этом счётчике должна стоять команда для воспроизводства звука при изменении количества открытых позиций
при вставлении перед реторном квакает на каждом тике, после реторна молчит как рыба.
Подскажите пожалуйста недоучке, что не так, как исправить и куда вставить команду звука
Пожалуйста для вставки кода используйте кнопку (Ваш код я на первый раз вставил правильно и ещё применил )
Пожалуйста для вставки кода используйте кнопку (Ваш код я на первый раз вставил правильно и ещё применил )
Спасибо Владимир, я первый раз :)
Уважаемые Программисты не проходите мимо, помогите исправить ошибку!
Вставил в советник исполнение звукового сигнала при открытии, закрытии, изменении, закрытии по стоплоссу и ошибке.
Всё работает прекрасно, кроме закрытия по стоплоссу, видимо я не туда вставил воспроизведение звука и так как я не очень в этом понимаю прошу Вашей помощи.
Весь код выкладывать нет смысла, покажу часть где по моему мнению должен воспроизводиться звук.
Итак, есть счётчик открытых позиций и мне кажется, что где то в этом счётчике должна стоять команда для воспроизводства звука при изменении количества открытых позиций
при вставлении перед реторном квакает на каждом тике, после реторна молчит как рыба.
Подскажите пожалуйста недоучке, что не так, как исправить и куда вставить команду звука
Любую торговую операцию нужно отлавливать в OnTradeTransaction - Вы обнаружите любую сделку: вход в рынок, выход из рынка. При этом можно всегда уточнить почему был выход: из-за срабатывания Стоп лосс или Тейк профит.
Примеры:
- www.mql5.com
//+------------------------------------------------------------------+ //| Total Positions | //+------------------------------------------------------------------+ int TotalPositions(int Type) { int cnt=0; static int cnt_pre=0; if(PositionsTotal()>0) for(int i=PositionsTotal()-1; i>=0; i--) if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && PositionGetInteger(POSITION_MAGIC)==MagicNumber) { if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && (Type==0 || Type==-1)) { cnt++; continue; } if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && (Type==1 || Type==-1)) { cnt++; } } if(UseSound && cnt_pre!=cnt) PlaySound(SoundStop); //Sound работает cnt_pre = cnt; return(cnt); }
Поправил ваш код.
В вашем коде оператор "return(cnt)" завершает работу функции раньше, чем запускается воспроизведение звука. Нужно добавить условие при котором будет вопроизводиться звук.
Спасибо большое! Значит я был на верном пути. Буду тестировать, отпишусь.
Любую торговую операцию нужно отлавливать в OnTradeTransaction - Вы обнаружите любую сделку: вход в рынок, выход из рынка. При этом можно всегда уточнить почему был выход: из-за срабатывания Стоп лосс или Тейк профит.
Примеры:
//+------------------------------------------------------------------+ //| Trade function | //+------------------------------------------------------------------+ void OnTrade() { }
Спасибо Владимир. Как видите Trade function у меня пустая, и функции OnTradeTransaction нет. Количество позиций ослеживается через функцию TotalPositions, как я понимаю, вот туда я и втыкал звук, возможно я ошибаюсь...
В вашем коде оператор "return(cnt)" завершает работу функции раньше, чем запускается воспроизведение звука. Нужно добавить условие при котором будет вопроизводиться звук.
Хорошо, спасибо, тогда в этом случае он будет квакать при любом изменении в количестве открытых позиций, тоесть при открытии, закрытии по обратному сигналу, закрытии по стоплоссу.
if(!trade.Buy(lot,NULL,NormalizeDouble(lprice.ask,_Digits),sl,tp,Cmt)) {Print("Buy order open error=",trade.ResultRetcode(), ". description: ",trade.ResultRetcodeDescription()); if(UseSound) PlaySound(SoundError);} else {Print("Buy order open opened success. respond=",trade.ResultRetcode(), " (",trade.ResultRetcodeDescription(),")"); if(UseSound) PlaySound(SoundOpenPosition); return(true);}
Так звучит открытие или ошибка
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && (Type==POSITION_TYPE_BUY || Type==-1)) {trade.PositionClose(PositionGetTicket(i),iSlippage); if(UseSound) PlaySound(SoundClosePosition); continue;}
Так звучит закрытие по обратному сигналу
А как мне тогда поймать закрытие по стоп лоссу/тейк профиту только???
Отлавливаем срабатывание Стоп лосс или Тейк профит.
Отлавливаем через OnTradeTransaction - проверяем свойство ENUM_DEAL_TYPE (Причина или источник проведения сделки), если это
DEAL_REASON_SL | Сделка проведена в результате срабатывания ордера Stop Loss |
DEAL_REASON_TP | Сделка проведена в результате срабатывания ордера Take Profit |
сигнализируем.
//+------------------------------------------------------------------+ //| SL TP Triggered.mq5 | //| Copyright © 2020, Vladimir Karputov | //+------------------------------------------------------------------+ #property copyright "Copyright © 2020, Vladimir Karputov" #property version "1.001" /* barabashkakvn Trading engine 3.137 */ #include <Trade\DealInfo.mqh> //--- CDealInfo m_deal; // object of CDealInfo class //--- input parameters //--- //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { //--- get transaction type as enumeration value ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- if transaction is result of addition of the transaction in history if(type==TRADE_TRANSACTION_DEAL_ADD) { if(HistoryDealSelect(trans.deal)) m_deal.Ticket(trans.deal); else { Print(__FILE__," ",__FUNCTION__,", ERROR: HistoryDealSelect(",trans.deal,")"); return; } //--- long reason=-1; if(!m_deal.InfoInteger(DEAL_REASON,reason)) { Print(__FILE__," ",__FUNCTION__,", ERROR: InfoInteger(DEAL_REASON,reason)"); return; } if((ENUM_DEAL_REASON)reason==DEAL_REASON_SL) Alert("Stop Loss activation"); else if((ENUM_DEAL_REASON)reason==DEAL_REASON_TP) Alert("Take Profit activation"); } } //+------------------------------------------------------------------+
- www.mql5.com
Отлавливаем срабатывание Стоп лосс или Тейк профит.
Отлавливаем через OnTradeTransaction - проверяем свойство ENUM_DEAL_TYPE (Причина или источник проведения сделки), если это
DEAL_REASON_SL | Сделка проведена в результате срабатывания ордера Stop Loss |
DEAL_REASON_TP | Сделка проведена в результате срабатывания ордера Take Profit |
сигнализируем.
Спасибо большое Владимир!
В этом случае команду на воспроизведение звука вставлять в код не нужно, воспроизводится сигнал "Алерт" выбранный в терминале. Верно?
...либо я могу заменить "Алерт" своей командой на воспроизведение звука?- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые Программисты не проходите мимо, помогите исправить ошибку!
Вставил в советник исполнение звукового сигнала при открытии, закрытии, изменении, закрытии по стоплоссу и ошибке.
Всё работает прекрасно, кроме закрытия по стоплоссу, видимо я не туда вставил воспроизведение звука и так как я не очень в этом понимаю прошу Вашей помощи.
Весь код выкладывать нет смысла, покажу часть где по моему мнению должен воспроизводиться звук.
Итак, есть счётчик открытых позиций и мне кажется, что где то в этом счётчике должна стоять команда для воспроизводства звука при изменении количества открытых позиций
при вставлении перед реторном квакает на каждом тике, после реторна молчит как рыба.
Подскажите пожалуйста недоучке, что не так, как исправить и куда вставить команду звука