remjte: Господа хорошие! Подскажите код который остановит тестирование советника при не достаточной маржи для открытия позиции. Спасибо!
Если AccountFreeMarginCheck() меньше определённого значения (например, меньше 50% от AccountFreeMargin) - выход из торговой функции, тест быстро заканчивается, так как пустые циклы почти не грузят.
evillive: Если AccountFreeMarginCheck() меньше определённого значения (например, меньше 50% от AccountFreeMargin) - выход из торговой функции, тест быстро заканчивается, так как пустые циклы почти не грузят.
Честно, еще очень зеленый, нашел вот такой кусок кода не подскажете как поправить
if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1); if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2); return (l_lots_4);
Честно, еще очень зеленый, нашел вот такой кусок кода не подскажете как поправить
if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1); if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2); return (l_lots_4);
Зачем править, и так сойдёт. Разве что имена переменных свои подставить.
Но если нужно риск поменьше, то if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) return (-1); - в этом случае, если после открытия позиции с указанным лотом останется 50% свободных средств или меньше, то return (-1)
Подскажите, пожалуйста. Нужно написать часть кода, где будет выбираться второй ордер в списке и затем удаляться (отложенный). Возвращает 4051 при OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
remjte: Господа хорошие! Подскажите код который остановит тестирование советника при не достаточной маржи для открытия позиции. Спасибо!
// проверяем доступность свободных средствif(AccountFreeMarginCheck(Symbol(),OP_BUY,OpenLot)<=0 || GetLastError()==134)
{
Print("It is impossible to open the order Buy, not enough money.");
return(0);
}
// проверяем доступность свободных средствif(AccountFreeMarginCheck(Symbol(),OP_SELL,OpenLot)<=0 || GetLastError()==134)
{
Print("It is impossible to open the order Sell, not enough money.");
return(0);
}
Pomid: Подскажите, пожалуйста. Нужно написать часть кода, где будет выбираться второй ордер в списке и затем удаляться (отложенный). Возвращает 4051 при OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
Счет ордеров начинается с 0. Попробуй, OrderSelect(0, SELECT_BY_POS, MODE_TRADES)
Здесь нужно выставить отложенные ордера и рассчитать их цены относительно цены закрытия предыдущего бара. BUYSTOP ставит, а SELLSTOP возвращает ошибку 130. В этом коде есть ошибка? Или в другой функции искать.
Здесь нужно выставить отложенные ордера и рассчитать их цены относительно цены закрытия предыдущего бара. BUYSTOP ставит, а SELLSTOP возвращает ошибку 130. В этом коде есть ошибка? Или в другой функции искать.
void SetOrders() {
double ldStop=0, ldTake=0;
int spr=MarketInfo(Symbol(), MODE_SPREAD);
double PredBar=iClose(NULL,PERIOD_M5,1);
double pAsk=PredBar+(DistanceSet+spr)*Point;
double pBid=PredBar-(DistanceSet+spr)*Point;
if (!ExistOrder(1)) {
if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
}
if (!ExistOrder(2)) {
if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
}
}
А почему бы к Автору не обратиться?! Он ещё живой и молодой, не старый! Координаты в коде над каждой функцией! Все его знают и уважают!
И научитесь вставлять код вот так, с SRC!
void SetOrders() {
double ldStop=0, ldTake=0;
int spr=MarketInfo(Symbol(), MODE_SPREAD);
double PredBar=iClose(NULL,PERIOD_M5,1);
double pAsk=PredBar+(DistanceSet+spr)*Point;
double pBid=PredBar-(DistanceSet+spr)*Point;
if (!ExistOrder(1)) {
if (StopLoss!=0) ldStop=pAsk-StopLoss*Point;
if (TakeProfit!=0) ldTake=pAsk+TakeProfit*Point;
SetOrder(OP_BUYSTOP, pAsk, ldStop, ldTake, 1);
}
if (!ExistOrder(2)) {
if (StopLoss!=0) ldStop=PredBar+(StopLoss*Point);
if (TakeProfit!=0) ldTake=pBid-TakeProfit*Point;
SetOrder(OP_SELLSTOP, pBid, ldStop, ldTake, 2);
}
}
C PredBar'ом побаловались без понимания, вот и результат! Сначала мат. часть учите!
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Господа хорошие! Подскажите код который остановит тестирование советника при не достаточной маржи для открытия позиции.
Спасибо!
Если AccountFreeMarginCheck() меньше определённого значения (например, меньше 50% от AccountFreeMargin) - выход из торговой функции, тест быстро заканчивается, так как пустые циклы почти не грузят.
Честно, еще очень зеленый, нашел вот такой кусок кода не подскажете как поправить
if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);
напишу попроще: как прописать такое условие - Пока не появилась новая свеча открытый ордер не модифицировать
Честно, еще очень зеленый, нашел вот такой кусок кода не подскажете как поправить
if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);
Зачем править, и так сойдёт. Разве что имена переменных свои подставить.
Но если нужно риск поменьше, то if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) return (-1); - в этом случае, если после открытия позиции с указанным лотом останется 50% свободных средств или меньше, то return (-1)
Господа хорошие! Подскажите код который остановит тестирование советника при не достаточной маржи для открытия позиции.
Спасибо!
Подскажите, пожалуйста. Нужно написать часть кода, где будет выбираться второй ордер в списке и затем удаляться (отложенный). Возвращает 4051 при OrderSelect(1, SELECT_BY_POS, MODE_TRADES)
Здесь нужно выставить отложенные ордера и рассчитать их цены относительно цены закрытия предыдущего бара. BUYSTOP ставит, а SELLSTOP возвращает ошибку 130. В этом коде есть ошибка? Или в другой функции искать.
void SetOrders() {
Здесь нужно выставить отложенные ордера и рассчитать их цены относительно цены закрытия предыдущего бара. BUYSTOP ставит, а SELLSTOP возвращает ошибку 130. В этом коде есть ошибка? Или в другой функции искать.
А почему бы к Автору не обратиться?! Он ещё живой и молодой, не старый! Координаты в коде над каждой функцией! Все его знают и уважают!
И научитесь вставлять код вот так, с SRC!
C PredBar'ом побаловались без понимания, вот и результат! Сначала мат. часть учите!