Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет Младен, спасибо за помощь, я применил ваши изменения, но это не совсем работает, возможно, было бы проще, если бы советник просто игнорировал все существующие открытые сделки, т.е. просто оставлял их открытыми, а затем открывал и закрывал свою собственную новую сделку.
В данный момент он открывает и закрывает свою собственную сделку, но при этом закрывает все дополнительные существующие открытые сделки.
увеличить
Из частичного кода вот что я могу предложить. Если создать булевский параметр NoCloses, и если этот параметр установить в true, то он не должен закрывать ордера, если его применить как в данном фрагменте (если CB и CS не равны 1, то код не будет закрывать ордера).
с уважением
Младен
Привет Mladen, спасибо за помощь, я применил ваши изменения, но это действительно не работает, возможно было бы проще, если бы советник просто игнорировал все существующие открытые сделки, т.е. просто оставлял их открытыми, а затем открывал и закрывал свою собственную новую сделку В настоящее время он открывает и закрывает свою собственную сделку, но он также закрывает все дополнительные существующие открытые сделки
увеличить
Из частичного кода вот что я могу предложить. Если создан булевский параметр NoCloses, и если этот параметр установлен в true, он не должен закрывать ордера, если его применить как в данном фрагменте (если CB и CS не равны 1, то код не будет закрывать ордера).
с уважением,
MladenЭто верно, но если я не понял, это означает, что сделка, открытая советником, также никогда не закроется, и он просто будет переключаться между покупкой и продажей?
Да. Это правильно.
Насколько я понял, это была ваша идея: позволить советнику открывать ордера, а затем вы будете управлять ордерами (закрывать их) вручную. С помощью этого параметра вы можете даже переключить его обратно на false, и тогда советник возобновит закрытие ордеров - таким образом, это "управляемо извне", как бы говоря.
Это верно, но если я не понял, это означает, что сделка, открытая советником, также никогда не закроется, и он просто будет переключаться между покупкой и продажей?
Да. Это правильно Насколько я понял, это была ваша идея: позволить советнику открывать ордера, а затем вы будете управлять ордерами (закрывать их) вручную. С помощью этого параметра вы можете даже переключить его обратно на false, и тогда советник возобновит закрытие ордеров - таким образом, он "управляем извне", как бы говоря.
Извините, я выразился двусмысленно, я хочу, чтобы советник открывал и закрывал свой ордер и игнорировал все существующие ордера, так например
1. У меня открыто 5 ордеров на продажу
2. Я применяю советника, он открывает 1 ордер на покупку
3. Теперь у меня 5 ордеров на продажу и 1 на покупку
4. Теперь советник срабатывает на продажу, поэтому он закрывает свой ордер на покупку.
5. Теперь у меня 6 ордеров на продажу (5 существующих, 1 ордер советника на продажу).
6. Теперь советник срабатывает на покупку, поэтому он закрывает свой ордер на продажу.
7. Теперь у меня 5 ордеров на продажу и 1 на покупку и т.д.
Я закрою существующие продажи, советник игнорирует любые другие сделки, кроме своих собственных, как указано выше.
увеличить
Он уже делает это, если вы установите параметр Magic в значение, отличное от 0 (это часть кода, которая проверяет, должен ли он закрыть ордер на покупку непосредственно перед ордером на закрытие).
Таким образом, если"Magic" не равен 0 и при условии, что значение для Magic уникально, он будет закрывать только ордера, открытые им самим
Извините, я был двусмыслен, я хочу, чтобы советник открывал и закрывал свой ордер и игнорировал все существующие ордера, например
1. У меня открыто 5 ордеров на продажу
2. Я применяю советника, он открывает 1 ордер на покупку
3. Теперь у меня 5 ордеров на продажу и 1 на покупку
4. Теперь советник срабатывает на продажу, поэтому он закрывает свой ордер на покупку.
5. Теперь у меня 6 ордеров на продажу (5 существующих, 1 ордер советника на продажу).
6. Теперь советник срабатывает на покупку, поэтому он закрывает свой ордер на продажу.
7. Теперь у меня 5 ордеров на продажу и 1 на покупку и т.д.
Я закрою существующие продажи, советник игнорирует любые другие сделки, кроме своих собственных, как указано выше.Торговля OncePerBar для определенного таймфрейма
Здравствуйте, уважаемые fEllA's!
У меня есть советник (даааа, у кого не бывает), который прекрасно работает на тестере, совершает несколько сделок на каждом баре 4H, согласно инструкции. Теперь, при тестировании на демо (Alpari UK) с 11 парами, советник берет только 1 сделку, в то время как должен брать больше (3 максимум, согласно инструкции). Только каждый 4H бар, если условия выполнены.
У меня есть функция 'Semaphor' с GlobalVariable, и этот кусок кода, чтобы предотвратить открытие нескольких ордеров в пределах одного предопределенного таймфрейма (4H в данном случае):
//Покупка
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))))
{
if (SignalsOnly)
{
// ------ Алерт должен быть только один раз на сигнал ИЛИ раз в 15 или 30 минут.
if (CheckAlertTime == iTime (NULL, 5, 0)) return(0);
else CheckAlertTime = iTime (NULL, 5, 0);
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " Сигнал ПОКУПКИ");
if (PlaySounds) PlaySound (WhichSound);
}
if (!IsTrade && !SignalsOnly)
{
if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);
else CheckAlertTime = iTime (NULL, OncePerBarTF, 0);
//Проверка свободной маржи
if (AccountFreeMargin() < (1000 * Lots))
{
Print ("У нас нет денег. Свободная маржа = ", AccountFreeMargin());
return(0);
}
if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
{
if (MoneyManagement) Lots = NormalizeDouble ((AccountFreeMargin() * Risk / 100 / ((Ask - BuySL) / Point / TickValue)), 2);
else Lots = Lots;
}
if (TradeIsBusy() && IsTradingAllowed() < 0)
return (-1);
RefreshRates();
Ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY " + MagicNo, MagicNo, 0, DodgerBlue);
if (Ticket > 0)
{
if (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES))
{
Print ("7Qi BUY opened: ", OrderOpenPrice());
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " Открыта покупка");
if (PlaySounds) PlaySound (WhichSound);
}
else
{
Print ("Ошибка открытия BUY: ", Err);
}
}
// TradedThisBar = Bars;
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
TradeIsNotBusy();
return (0);
}
}
//-------------------------------------------------
Возможно ли, что этот код:
if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);
else CheckAlertTime = iTime (NULL, OncePerBarTF, 0);
не позволяет советнику торговать в середине часа? Проверяет ли он только в начале бара?
Если я использую функцию "TradedThisBar = Bars", мне придется оставить советника только на 1 таймфрейме, правильно?
Функция 'Semaphor' закодирована в TrailingStops тоже, PartialCloseLots тоже.
Спасибо всем за помощь,
Удачи,
Саймон
Словения
Iiiiiik - Я нашел проблему
Привет!
Я нашел проблему - скорее всего это комбинация:
if (TradeIsBusy() /*&& IsTradingAllowed()*/ < 0)
return (-1);
//-----------------------------------------------------------------------------------------
int IsTradingAllowed (int MaxWaitingSec = 30)
{
if (!IsTradeAllowed())
{
int StartWaitingTime = GetTickCount();
Print ("Торговый контекст занят! Подождите, пока он освободится...");
if (Alerts) Alert (Symbol() + " Торговля советником запрещена! Ожидание...");
while (true)
{
if (IsStopped())
{
Print ("Советник был остановлен!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )
{
Print( "Превышен лимит ожидания (" + MaxWaitingSec + " сек)!" );
return(-2);
}
if (IsTradeAllowed())
{
Print ("Торговый контекст теперь свободен!");
return(0);
}
Sleep (100);
}
}
else
{
Print ("Торговый контекст свободен!");
return(1);
}
}
*/
//-----------------------------------------------
int TradeIsBusy (int MaxWaitingSec = 30)
{
if (IsTesting()) return(1);
int Err = 0, StartWaitingTime = GetTickCount();
while (true)
{
if (IsStopped())
{
Print ("Советник был остановлен!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Print ("Время ожидания (" + MaxWaitingSec + " сек) превышено!");
if (Alerts) Alert (Symbol() + " Время ожидания эксперта превышено!");
return(-2);
}
if (GlobalVariableCheck ("TradeIsBusy"))
break;
else
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableCheck - Error # ", Err);
Sleep (100);
continue;
}
}
if (GlobalVariableSet ("TradeIsBusy", 1.0) > 0) return(1);
else
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSet - Error # ", Err);
Sleep(100);
continue;
}
}
}
while (true)
{
if (IsStopped())
{
Print ("Советник был остановлен!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Print ("Время ожидания (" + MaxWaitingSec + " сек) превышено!");
if (Alerts) Alert (Symbol() + " время ожидания превышено!");
return (-2);
}
if (GlobalVariableSetOnCondition ("TradeIsBusy", 1.0, 0.0 )) return (1);
else
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSetOnCondition - Error # ", Err);
continue;
}
}
if (Alerts) Alert (Symbol() + " - ожидание завершения торговли другим советником...");
Sleep (1000);
}
}
//--------------------------------
void TradeIsNotBusy()
{
int Err;
if (IsTesting())
{
return(0);
}
while (true)
{
if (IsStopped())
{
Print (Symbol() + " Советник был остановлен!" );
return(-1);
}
if (GlobalVariableSet ("TradeIsBusy", 0.0) > 0) return(1);
else
{
Err = GetLastError();
if (Err != 0)
Print ("TradeIsNotBusy - GlobalVariableSet - Error # ", Err);
}
Sleep (100);
}
}
//-----------------------------------------------------------------------------------------------
Я попробую без функции IsTradeAllowed.
В любом случае спасибо,
Удачи,
Саймон
код ошибки 130
----- удалено ----- больше не нужно......
Загружаемый учебник по mq4
Привет, ребята,
не могу найти учебник или справочник (не онлайн !!) по коду mq4.
Не могли бы вы мне помочь?
с наилучшими пожеланиями
Решено, пришлось распаковать файл с помощью утилиты.