yur4ik: Здравствуйте! Помогите пожалуйста с модулем сигналов на закрытие позиций. Что я не так делаю?
Ваш файл - это модуль СИГНАЛОВ. В системе эксперта он встраивается так же как и модуль СИГНАЛОВ ПОЛЬЗОВАТЕЛЬСКОГО индикатора. Другими словами сигналы генерируемые Вашим модулем имеют ВЕС и может случится так, что этого веса не хватит для срабатывания сигнала.
Нужно подумать, как лучше делать закрытие применительно в Вашем случае. Возможно это нужно делать не в модуле сигналов
Ваш файл - это модуль СИГНАЛОВ. В системе эксперта он встраивается так же как и модуль СИГНАЛОВ ПОЛЬЗОВАТЕЛЬСКОГО индикатора. Другими словами сигналы генерируемые Вашим модулем имеют ВЕС и может случится так, что этого веса не хватит для срабатывания сигнала.
Нужно подумать, как лучше делать закрытие применительно в Вашем случае. Возможно это нужно делать не в модуле сигналов
Хотелось бы в виде модуля сигналов, что бы через генератор советников собирать можно было. В момент, когда должен срабатывать данный модуль, LongCondition() и ShortCondition() во втором модуле советника возвращают нулевые значения - то есть вес=0, я правильно понимаю? Соответственно вес сигнала данного модуля должен перевесить, но он не срабатывает. В CheckCloseLong() и CheckCloseShort() я вставил строки Print("-------------"); и Print(time_GMT_DST()); которые, при нормальной работе модуля, должны делать соответствующие записи в журнал при поступлении каждого тика, я правильно понимаю? Записи не делаются, CheckCloseLong() и CheckCloseShort() не вызываются. В чем подвох?
Хотелось бы в виде модуля сигналов, что бы через генератор советников собирать можно было. В момент, когда должен срабатывать данный модуль, LongCondition() и ShortCondition() во втором модуле советника возвращают нулевые значения - то есть вес=0, я правильно понимаю? Соответственно вес сигнала данного модуля должен перевесить, но он не срабатывает. В CheckCloseLong() и CheckCloseShort() я вставил строки Print("-------------"); и Print(time_GMT_DST()); которые, при нормальной работе модуля, должны делать соответствующие записи в журнал при поступлении каждого тика, я правильно понимаю? Записи не делаются, CheckCloseLong() и CheckCloseShort() не вызываются. В чем подвох?
Я конечно топорно объясняю, но я только учусь
Используйте методы
//--- methods of checking if the market models are formedvirtualint LongCondition(void);
virtualint ShortCondition(void);
Здравствуйте, подскажите, как сделать счетчик убыточных сделок? Советник анализирует последнюю сделку на истории - если она убыточна, то добавляет +1 к переменной, которая и будет являться количеством подряд убыточных сделок.
Как только прибыльная сделка наступает - переменную нужно обнулить.
Здравствуйте, подскажите, как сделать счетчик убыточных сделок? Советник анализирует последнюю сделку на истории - если она убыточна, то добавляет +1 к переменной, которая и будет являться количеством подряд убыточных сделок.
Как только прибыльная сделка наступает - переменную нужно обнулить.
Можно отказаться от работы с торговой историей и работать только в OnTradeTransaction() - там ловить сделку с типом "OUT" - то есть это и будет закрытие позиции. Как только такая сделка нашлась - определяем была она прибыльной или убыточной. Соответственно счётчик "losses" сбрасываем или увеличиваем.
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration value ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(type==TRADE_TRANSACTION_DEAL_ADD)
{
long deal_ticket =0;
long deal_order =0;
long deal_time =0;
long deal_time_msc =0;
long deal_type =-1;
long deal_entry =-1;
long deal_magic =0;
long deal_reason =-1;
long deal_position_id =0;
double deal_volume =0.0;
double deal_price =0.0;
double deal_commission =0.0;
double deal_swap =0.0;
double deal_profit =0.0;
string deal_symbol ="";
string deal_comment ="";
string deal_external_id ="";
if(HistoryDealSelect(trans.deal))
{
deal_ticket =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
deal_order =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
deal_time =HistoryDealGetInteger(trans.deal,DEAL_TIME);
deal_time_msc =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
deal_type =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
deal_entry =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
deal_magic =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
deal_reason =HistoryDealGetInteger(trans.deal,DEAL_REASON);
deal_position_id =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);
deal_volume =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
deal_price =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
deal_commission =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
deal_swap =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
deal_profit =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);
deal_symbol =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
deal_comment =HistoryDealGetString(trans.deal,DEAL_COMMENT);
deal_external_id =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
}
elsereturn;
if(deal_symbol==Symbol() && deal_magic==m_magic)
if(deal_entry==DEAL_ENTRY_OUT)
{
if(deal_commission+deal_swap+deal_profit>0)
{
losses=0;
}
else
{
losses++;
}
}
}
}
А проверку в торговой истории делать в OnInit() - один раз при старте советника.
Приветствую. Вопрос, в большей степени, логический.
Так называемая система антимартингейл, с ограничением количества увеличений. При закрытии в профит, следующий лот увеличивается на коэффициент. При убытке или если количество прибыльных позиций, идущих подряд, превысит указанное число, лот равен стартовому.
После превышения указанного количества прибыльных позиций, как начать цикл увеличения заново?
int K_U_=5;
double LotExponent=2.00;
//+------------------------------------------------------------------+double llot()
{
double lt1=LotLastCloPos(Symbol(),m_magic);//лот последней закрытой позиции
if(CountProfit(Symbol(),m_magic)>=1 && CountProfit(Symbol(),m_magic)<K_U_)
LotSize=lt1*LotExponent;//else
LotSize=Lots;
return(LotSize);
}
Приветствую. Вопрос, в большей степени, логический.
Так называемая система антимартингейл, с ограничением количества увеличений. При закрытии в профит, следующий лот увеличивается на коэффициент. При убытке или если количество прибыльных позиций, идущих подряд, превысит указанное число, лот равен стартовому.
После превышения указанного количества прибыльных позиций, как начать цикл увеличения заново?
/
Пример в коде Stop Loss Take Profit: размер лота хранится (перезаписывается, увеличивается и сбрасывается в минимум) в переменной "ExtLot" объявленной на глобальном программном уровне (в шапке). В OnTradeTransaction() отлавливается сделки с типом "выход из рынка" и проверяется как была закрыта сделка - по Тейк Профит или по Стоп Лосс:
Здравствуйте! Помогите пожалуйста с модулем сигналов на закрытие позиций. Что я не так делаю?
Ваш файл - это модуль СИГНАЛОВ. В системе эксперта он встраивается так же как и модуль СИГНАЛОВ ПОЛЬЗОВАТЕЛЬСКОГО индикатора. Другими словами сигналы генерируемые Вашим модулем имеют ВЕС и может случится так, что этого веса не хватит для срабатывания сигнала.
Нужно подумать, как лучше делать закрытие применительно в Вашем случае. Возможно это нужно делать не в модуле сигналов
Ваш файл - это модуль СИГНАЛОВ. В системе эксперта он встраивается так же как и модуль СИГНАЛОВ ПОЛЬЗОВАТЕЛЬСКОГО индикатора. Другими словами сигналы генерируемые Вашим модулем имеют ВЕС и может случится так, что этого веса не хватит для срабатывания сигнала.
Нужно подумать, как лучше делать закрытие применительно в Вашем случае. Возможно это нужно делать не в модуле сигналов
Хотелось бы в виде модуля сигналов, что бы через генератор советников собирать можно было. В момент, когда должен срабатывать данный модуль, LongCondition() и ShortCondition() во втором модуле советника возвращают нулевые значения - то есть вес=0, я правильно понимаю? Соответственно вес сигнала данного модуля должен перевесить, но он не срабатывает. В CheckCloseLong() и CheckCloseShort() я вставил строки Print("-------------"); и Print(time_GMT_DST()); которые, при нормальной работе модуля, должны делать соответствующие записи в журнал при поступлении каждого тика, я правильно понимаю? Записи не делаются, CheckCloseLong() и CheckCloseShort() не вызываются. В чем подвох?
Я конечно топорно объясняю, но я только учусьХотелось бы в виде модуля сигналов, что бы через генератор советников собирать можно было. В момент, когда должен срабатывать данный модуль, LongCondition() и ShortCondition() во втором модуле советника возвращают нулевые значения - то есть вес=0, я правильно понимаю? Соответственно вес сигнала данного модуля должен перевесить, но он не срабатывает. В CheckCloseLong() и CheckCloseShort() я вставил строки Print("-------------"); и Print(time_GMT_DST()); которые, при нормальной работе модуля, должны делать соответствующие записи в журнал при поступлении каждого тика, я правильно понимаю? Записи не делаются, CheckCloseLong() и CheckCloseShort() не вызываются. В чем подвох?
Я конечно топорно объясняю, но я только учусьИспользуйте методы
вместо своих CheckCloseLong и CheckCloseShort.
Спасибо.
Здравствуйте, подскажите, как сделать счетчик убыточных сделок?
Советник анализирует последнюю сделку на истории - если она убыточна, то добавляет +1 к переменной, которая и будет являться количеством подряд убыточных сделок.
Как только прибыльная сделка наступает - переменную нужно обнулить.
Здравствуйте, подскажите, как сделать счетчик убыточных сделок?
Советник анализирует последнюю сделку на истории - если она убыточна, то добавляет +1 к переменной, которая и будет являться количеством подряд убыточных сделок.
Как только прибыльная сделка наступает - переменную нужно обнулить.
Можно отказаться от работы с торговой историей и работать только в OnTradeTransaction() - там ловить сделку с типом "OUT" - то есть это и будет закрытие позиции. Как только такая сделка нашлась - определяем была она прибыльной или убыточной. Соответственно счётчик "losses" сбрасываем или увеличиваем.
А проверку в торговой истории делать в OnInit() - один раз при старте советника.Всем привет,
Не подскажите как можно программно очистить журнал экспертов перед выводом в него информацию :?
Только через Win API?
Спасибо!
Всем привет,
Не подскажите как можно программно очистить журнал экспертов перед выводом в него информацию :?
Только через Win API?
Спасибо!
/
/
Пример в коде Stop Loss Take Profit: размер лота хранится (перезаписывается, увеличивается и сбрасывается в минимум) в переменной "ExtLot" объявленной на глобальном программном уровне (в шапке). В OnTradeTransaction() отлавливается сделки с типом "выход из рынка" и проверяется как была закрыта сделка - по Тейк Профит или по Стоп Лосс:
Если по Стоп Лосс то удваиваем лот, если по Тейк Профит - то сбрасываем размер лота в минимальное значение.
Примечание: в самом советнике немного некорректно выполняется расчёт Стоп Лосс и Тейк Профит - но скоро переопубликуется код.