Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Будьте добры, подскажите, где можно посмотреть удаление отложенного ордера, если он не активировался за последовавшие две свечи после установки? Удаление по времени не проходит(((, потому что это Renko график.
Спасибо!

Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

Дмитрий_2008
если тебе часовые свечи то посмотри советник который я выложил раньше там он по внешней переменной удаляет в заданное время

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Дмитрий_2008
если тебе часовые свечи то посмотри советник который я выложил раньше там он по внешней переменной удаляет в заданное время


спасибо, но речь о свечах Renko, они не имеют фиксированного количества секунд или часов
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


но речь о свечах Renko...


Как вариант:
Определить появление нового бара можно так же как и на обычном графике, при этом считаем бары. Как только установлен ордер - счетчик в "0", есть новый бар: +1 и так далее... Как только счетчик насчитает нужное кол-во - удалить ордер.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



но речь о свечах Renko...


Как вариант:
Определить появление нового бара можно так же как и на обычном графике, при этом считаем бары. Как только установлен ордер - счетчик в "0", есть новый бар: +1 и так далее... Как только счетчик насчитает нужное кол-во - удалить ордер.

да, да, это было бы решение!!! а как определить "тикет" простого бара, где это уже встречалось?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано




но речь о свечах Renko...


Как вариант:
Определить появление нового бара можно так же как и на обычном графике, при этом считаем бары. Как только установлен ордер - счетчик в "0", есть новый бар: +1 и так далее... Как только счетчик насчитает нужное кол-во - удалить ордер.

да, да, это было бы решение!!! а как определить "тикет" простого бара, где это уже встречалось?


твоя задача решается крайне просто.

if (OrderOpenTime() 1)
{
........
удаление ордеров
........
}


если время открытия ордера меньше чем время открытия третьего бара назад - удаляем(0 - текущий, 1- предыдущий, 2 - предпредыдущий и так далее).

если сова работает на одном графике а тебе надо привязываться к определенному ТФ(я не работал с графиками ренко), то вместо Time[] используй iTime(...).
как работать с iTime() найдешь в официальной справке, думаю именно она тебе и нужна. и как удалять ордера на последних страницах уже раз стопицот тоже обсуждалось.

а вобще, у меня утром приступ альтруизма, держи.

sym - символ(пара) которая тебе нужна, TF - таймфрейм, shift - сдвиг от текущего бара для проверки времени открытия ордера(по умолчанию можешь вобще ничего не передавать в функцию, значения по умолчанию смотри в объявлении)

void closeByTF(string sym, int TF, int shift = 2)
{
int ord = OrdersTotal();
for(int i=ord-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS)) continue;
if (OrderMagicNumber()!= magic || OrderSymbol() != sym || OrderType()>1 || OrderOpenTime() ) continue;
int k=10;
while (k>=0)
{
if (OrderDelete(OrderTicket())) break;
Sleep(50);
k--;
}
}

} Изменено пользователем dermitay
  • Лайк 4
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

однако Боги ко мне милостивы сегодня!!!!! и они ближе, чем на небесах.
спасибо и низкий поклон!!!!!!!!!!

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

хм. я не знал что в объявлении ф-ции нельзя применять константы текущего графика.
поэтому объявление перепиши вот так и придется всегда передавать в нее значения(ну кроме отступа в барах, его можешь передавать а можешь не передавать).

void closeByTF(string sym, int TF, int shift = 2)
{
...
}

или объявить глобально sym и TF(в общем списке перменных) и в ините присвоить им текущие значение (sym = _Symbol; TF = _Period;)

а объявление переписать вот так
void closeByTF( int shift = 2)
{
...
}

Изменено пользователем dermitay
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

вечер добрый.
осваивал урок №8 (Качественное открытие и модификация ордеров). компиляция выдала ошибки, просмотрел у кого были подобные проблемы и добавил: (return(0); в OrderSendX) и (return(true); в OrderModifyX). не вылечило(((. сравнивал готовые коды, но так и не нашел где ошибка. помогите, плиз

Спойлер

int signal =1;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (signal == 1)
{
int ticket = OrderSendX(Symbol(), OP_BUY, 0.1, Ask, 30, 0, 0, "Test", 123, 0, Blue);

double asl = NormalizeDouble((Ask-300)*Point, Digits);
double atp = NormalizeDouble((Ask+500)*Point, Digits);
OrderModifyX(ticket, OrderOpenPrice(), asl, atp, 0);
}

}
//+------------------------------------------------------------------+
bool OrderModifyX(int ticket,double price,double stoploss,double takeprofit,datetime expiration,color arrow_color)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
price = NormalizeDouble(price, Digits);
stoploss = NormalizeDouble(stoploss, Digits);
takeprofit = NormalizeDouble(takeprofit, Digits);
CheckValidStop (Symbol(), price, stoploss);

bool result;
int err = GetLastError();
err = 0;

int Retry = 10;
int cnt = 0;
bool exit_loop = false;

while(!exit_loop) // Цикл на модификацию ордера
{
result = OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);
err = GetLastError(); // Получение кода ошибки

if (result == true) // Если ордер модифицирован
{
Print("Ордер # " + ticket + "успешно модифицирован!");
return(true);
}

switch(err)
{
case ERR_NO_ERROR:
exit_loop = true;
break;

case ERR_SERVER_BUSY: // сервер занят
case ERR_NO_CONNECTION: // нет подключения
case ERR_BROKER_BUSY: // брокер занят
case ERR_TRADE_CONTEXT_BUSY:
cnt++;
break;

case ERR_INVALID_PRICE: // недопустимая цена
case ERR_PRICE_CHANGED:
case ERR_OFF_QUOTES: // нет котировки
case ERR_REQUOTE:
RefreshRates();
continue;

default:
exit_loop = true;
break;

} // switch(err)
}

if (err != ERR_NO_ERROR)
{
Print("Ошибка модификации ордера # " + ticket);
Print("Код ошибки: " + err);
}
}
else
{
Print("Не удалось выбрать ордер, ticket = " + ticket);
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
void CheckValidStop(string symbol, double price, double& sl)
{
if (sl == 0)
return;
double servers_min_stop = MarketInfo(symbol, MODE_STOPLEVEL) * MarketInfo(symbol, MODE_POINT);

if(MathAbs(price-sl) {
if (price > sl)
sl = price - servers_min_stop;
else sl = sl + servers_min_stop;
}

sl = NormalizeDouble(sl, MarketInfo(symbol, MODE_DIGITS));

}
//+------------------------------------------------------------------+

int OrderSendX(string symbol,int cmd,double volume,double price,int slippage,double stoploss,
double takeprofit,string comment,int magic=0,datetime expiration=0,color arrow_color=clrNONE)
{
int err = GetLastError();
err = 0;
bool exit_loop = false;
int ticket = -1;

int Retry = 10; // количество попыток (здесь на открытие ордера)
int cnt = 0; // счетчик попыток

if (cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss,
takeprofit, comment, magic, expiration, arrow_color);
err = GetLastError();

switch(err)
{
case ERR_NO_ERROR:
exit_loop = true;
break;

case ERR_SERVER_BUSY: // сервер занят
case ERR_NO_CONNECTION: // нет подключения
case ERR_BROKER_BUSY: // брокер занят
case ERR_TRADE_CONTEXT_BUSY:
cnt++;
break;

case ERR_INVALID_PRICE: // недопустимая цена
case ERR_PRICE_CHANGED:
case ERR_OFF_QUOTES: // нет котировки
case ERR_REQUOTE:
RefreshRates();
continue;

default:
exit_loop = true;
break;

} // switch(err)

if (cnt > Retry)
exit_loop = true;

if (!exit_loop)
{
Sleep(1000);
RefreshRates();
}
else
{
if(err != ERR_NO_ERROR)
{
Print("Ошибка : " + err);
}
}

if (err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
return(ticket);
}

Print("Ошибка открытия ордера после " + cnt + " попыток.");
return(-1);

} // while(!exit_loop)
} // if (cmd == OP_BUY || cmd == OP_SELL)
return(0);
}
//+------------------------------------------------------------------+

ошибка_test8.jpg

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


вечер добрый.
осваивал урок №8 (Качественное открытие и модификация ордеров). компиляция выдала ошибки, просмотрел у кого были подобные проблемы и добавил: (return(0); в OrderSendX) и (return(true); в OrderModifyX). не вылечило(((. сравнивал готовые коды, но так и не нашел где ошибка. помогите, плиз

Спойлер

int signal =1;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (signal == 1)
{
int ticket = OrderSendX(Symbol(), OP_BUY, 0.1, Ask, 30, 0, 0, "Test", 123, 0, Blue);

double asl = NormalizeDouble((Ask-300)*Point, Digits);
double atp = NormalizeDouble((Ask+500)*Point, Digits);
OrderModifyX(ticket, OrderOpenPrice(), asl, atp, 0);
}

}
//+------------------------------------------------------------------+
bool OrderModifyX(int ticket,double price,double stoploss,double takeprofit,datetime expiration,color arrow_color)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
price = NormalizeDouble(price, Digits);
stoploss = NormalizeDouble(stoploss, Digits);
takeprofit = NormalizeDouble(takeprofit, Digits);
CheckValidStop (Symbol(), price, stoploss);

bool result;
int err = GetLastError();
err = 0;

int Retry = 10;
int cnt = 0;
bool exit_loop = false;

while(!exit_loop) // Цикл на модификацию ордера
{
result = OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);
err = GetLastError(); // Получение кода ошибки

if (result == true) // Если ордер модифицирован
{
Print("Ордер # " + ticket + "успешно модифицирован!");
return(true);
}

switch(err)
{
case ERR_NO_ERROR:
exit_loop = true;
break;

case ERR_SERVER_BUSY: // сервер занят
case ERR_NO_CONNECTION: // нет подключения
case ERR_BROKER_BUSY: // брокер занят
case ERR_TRADE_CONTEXT_BUSY:
cnt++;
break;

case ERR_INVALID_PRICE: // недопустимая цена
case ERR_PRICE_CHANGED:
case ERR_OFF_QUOTES: // нет котировки
case ERR_REQUOTE:
RefreshRates();
continue;

default:
exit_loop = true;
break;

} // switch(err)
}

if (err != ERR_NO_ERROR)
{
Print("Ошибка модификации ордера # " + ticket);
Print("Код ошибки: " + err);
}
}
else
{
Print("Не удалось выбрать ордер, ticket = " + ticket);
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
void CheckValidStop(string symbol, double price, double& sl)
{
if (sl == 0)
return;
double servers_min_stop = MarketInfo(symbol, MODE_STOPLEVEL) * MarketInfo(symbol, MODE_POINT);

if(MathAbs(price-sl) {
if (price > sl)
sl = price - servers_min_stop;
else sl = sl + servers_min_stop;
}

sl = NormalizeDouble(sl, MarketInfo(symbol, MODE_DIGITS));

}
//+------------------------------------------------------------------+

int OrderSendX(string symbol,int cmd,double volume,double price,int slippage,double stoploss,
double takeprofit,string comment,int magic=0,datetime expiration=0,color arrow_color=clrNONE)
{
int err = GetLastError();
err = 0;
bool exit_loop = false;
int ticket = -1;

int Retry = 10; // количество попыток (здесь на открытие ордера)
int cnt = 0; // счетчик попыток

if (cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss,
takeprofit, comment, magic, expiration, arrow_color);
err = GetLastError();

switch(err)
{
case ERR_NO_ERROR:
exit_loop = true;
break;

case ERR_SERVER_BUSY: // сервер занят
case ERR_NO_CONNECTION: // нет подключения
case ERR_BROKER_BUSY: // брокер занят
case ERR_TRADE_CONTEXT_BUSY:
cnt++;
break;

case ERR_INVALID_PRICE: // недопустимая цена
case ERR_PRICE_CHANGED:
case ERR_OFF_QUOTES: // нет котировки
case ERR_REQUOTE:
RefreshRates();
continue;

default:
exit_loop = true;
break;

} // switch(err)

if (cnt > Retry)
exit_loop = true;

if (!exit_loop)
{
Sleep(1000);
RefreshRates();
}
else
{
if(err != ERR_NO_ERROR)
{
Print("Ошибка : " + err);
}
}

if (err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
return(ticket);
}

Print("Ошибка открытия ордера после " + cnt + " попыток.");
return(-1);

} // while(!exit_loop)
} // if (cmd == OP_BUY || cmd == OP_SELL)
return(0);
}
//+------------------------------------------------------------------+




Если позволите неправильно написана OrderModifyX(ticket, OrderOpenPrice(), asl, atp, 0);, может я чего то незнаю и есть такая функция, вроде на модификацию это -OrderModify(.......);
вторая ошибка комипилятора:
if (err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); // тут просит проверить, выбран ли ордер
return(ticket);
}
нужно написать-
if (err == ERR_NO_ERROR)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
return(ticket);
}
спасибо за внимание!

test2.mq4

Изменено пользователем vitek01
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

спасибо за помощь, OrderModifyX это "внешняя" функция, направленная на проверку ошибок при модификации.
по поводу "if" , не готов комментировать я запутался. но у Метра именно так.

ошибка_test8_2.jpg

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


спасибо за помощь, OrderModifyX это "внешняя" функция, направленная на проверку ошибок при модификации.
по поводу "if" , не готов комментировать я запутался. но у Метра именно так.



Я уже понял, тогда компилятор выдает ошибку что не написан какой то параметр ParametrsCount, нужно проверить и дописать. Еще обьявлять нужно до ее вызова. а не после.
А насчет метра, это не ошибка, просто предупреждение что нужно все же проверить, а иначе программа может некоректно или криво работать. В новой MQL ввели strict - он проверяет дотошно, вот и просит подумать над логикой кода. Я не програмист и тоже учусь, если я не прав пусть матерые кодеры поправят.
________________________________________________________________________________
проверил код еще раз, исправил, ошибок нет. так где исправлял есть вот такой коммент
// ------------------------ .

test2.mq4

Изменено пользователем vitek01
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

в тестере Работает!!!!! спасибо!!!! удивительно, но в самом деле - при добавлении параметра цвета в OrderModifyX ошибка исчезает, хотя он не обязателен в стандартном OrderModify!!!
("arrow_color
[in] Цвет стрелок модификации StopLoss и/или TakeProfit на графике. Если параметр отсутствует, или его значение равно CLR_NONE, то стрелка на графике не отображается.")
СПАСИБО, надеюсь и сам, в будущем, буду не только вопросы генерировать

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Кто может подсказать, вот какая штука, во внешних переменых вручную вбил два уровня верху от цены и внизу. По моей логике цена обновила один из уровней и все вроде бы прекрасно, как и задумано. Но если я переключу таймфрейм, то уровни сбрасываются при возвращений в этот таимфрейм и опять вбитые вручную появляются.
___Как сделать чтобы при смене периода сохранялись эти новые данные?

//______________________________________________________________________________+
У меня внешние глобальные (уровни которые я вбиваю) в основном коде, а все остальные глобальные (хай и лоу)во включаемом файле , это как то может влиять?

Изменено пользователем vitek01
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Кто может подсказать, вот какая штука, во внешних переменых вручную вбил два уровня верху от цены и внизу. По моей логике цена обновила один из уровней и все вроде бы прекрасно, как и задумано. Но если я переключу таймфрейм, то уровни сбрасываются при возвращений в этот таимфрейм и опять вбитые вручную появляются.
___Как сделать чтобы при смене периода сохранялись эти новые данные?

//______________________________________________________________________________+
У меня внешние глобальные (уровни которые я вбиваю) в основном коде, а все остальные глобальные (хай и лоу)во включаемом файле , это как то может влиять?



попробуй сделать вот так. глобально объяви две переменные(хай/лоу, например "А" и "С"). в ините присваивай им значения из двух других внешних переменных(которые extern или input, пусть будут "D" и "E", которые ты сам вручную вбиваешь), но с таким условием, что если эти две внешние больше чем текущие( например if (D>А) А=D). только смотри с минимумом не перемудри. там надо вначале исходный максить, чтобы он переписался под текущий.

в основном коде же обновляй А и С.
по идее при смене ТФ А и С не должны обнуляться.

вкратце еще раз.
1. до инита объявить две дополнительные переменные("текущие")
2. в ините присвоить им значения из внешних переменных, если те больше чем "текущие".
3. в ОнТике обновлять хай/лоу этих "текущих" дополнительных переменных

я на днях столкнулся с подобной проблемой, только наоборот, при смене ТФ переменные не переинициализируются, не обнуляются, пришлось в ините принудительно все что необходимо обнулять. Изменено пользователем dermitay
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Кто может подсказать, вот какая штука, во внешних переменых вручную вбил два уровня верху от цены и внизу. По моей логике цена обновила один из уровней и все вроде бы прекрасно, как и задумано. Но если я переключу таймфрейм, то уровни сбрасываются при возвращений в этот таимфрейм и опять вбитые вручную появляются.
___Как сделать чтобы при смене периода сохранялись эти новые данные?

//______________________________________________________________________________+
У меня внешние глобальные (уровни которые я вбиваю) в основном коде, а все остальные глобальные (хай и лоу)во включаемом файле , это как то может влиять?




попробуй сделать вот так. глобально объяви две переменные(хай/лоу, например "А" и "С"). в ините присваивай им значения из двух других внешних переменных(которые extern или input, пусть будут "D" и "E", которые ты сам вручную вбиваешь), но с таким условием, что если эти две внешние больше чем текущие( например if (D>А) А=D). только смотри с минимумом не перемудри. там надо вначале исходный максить, чтобы он переписался под текущий.

в основном коде же обновляй А и С.
по идее при смене ТФ А и С не должны обнуляться.

вкратце еще раз.
1. до инита объявить две дополнительные переменные("текущие")
2. в ините присвоить им значения из внешних переменных, если те больше чем "текущие".
3. в ОнТике обновлять хай/лоу этих "текущих" дополнительных переменных

я на днях столкнулся с подобной проблемой, только наоборот, при смене ТФ переменные не переинициализируются, не обнуляются, пришлось в ините принудительно все что необходимо обнулять.


Спасибо dermitay, только сегодня сам додумался до этого, как вы предложили. При переключений периода данные инициализируются(обновляются) и надо же им где то эти данные брать, а у меня они только во внешних глобальных переменных,он их и подставляет. Вот добавив в глобальные новые переменные без присвоения, а в ините присвоив им внешние переменные которые можно менять. И при смене тайма программа будет брать их из переменных в ините.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Дядьки, а кто-нибудь в курсе как объект типа Edit сделать так чтобы на него не распространялся ChartRedraw()?
проблема в том, что Redraw() мне нужен для перерисовки других объектов, показывающих их текущее состояние, и эта фигня влияет и на Edit, когда я вбиваю в него значения, он постоянно "моргает" - ведь код исполняется и идет постоянная перерисовка объектов.

как-нибудь можно добавить какой либо объект в исключения перерисовки, чтобы Edit не "моргал"?

это не то чтобы критично, просто... не элегантно :))

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Ребята подскажите пожалуйста, написал индикатор. все работает хорошо, но вот значки он рисует далеко от баров, как их приблизить, или рисовать хотя бы на хай или лоу баров?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Lot_variable=Lot_min+(Lot_min*(Step_Balance/Start_Balance)*MathRound(((AccountBalance()-(AccountBalance()%Step_Balance))-Start_Balance)/Step_Balance));

вот формула, все типы данных тут double. Почему я не могу вычесть остаток от деления?
'%' - illegal operation use BeerGodEA mod by SVS 1.01.mq4 142 116


Добавлено: 29-04-2016 20:52:46

Проблему решил привидением всего, что связанно с балансом к int, чтобы не было warning с AccountBalance(), я сделал это: int AB=StrToInteger(DoubleToStr(MathRound(AccountBalance()),0));
int SB=StrToInteger(DoubleToStr(MathRound(Step_Balance),0)); :d Изменено пользователем SVS696
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Куда скидываются скрины из ChartScreenShot, где их искать? В тестере стратегий они скринятся или нет?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Проблему решил привидением всего, что связанно с балансом к int, чтобы не было warning с AccountBalance(), я сделал это: int AB=StrToInteger(DoubleToStr(MathRound(AccountBalance()),0));

приведение к int:
int AB = (int)(AccountBalance()); // просто откидывается дробная часть
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

А есть функция запрета открытия вручную ордера, например наблюдается бычьий тренд, а у меня вдруг на созвездий сошлись нептун с луной, небо покрылось серебрянной стружкой и гром ударил в нужное мгновение и появилась у меня волшебная мысль пойти против тренда. А советник постучав по папироске, стряхнув махорку с озябших рук, задумчиво произнес что это у меня помутнение рассудка и он(Советник) не дает добро на открытие ордера против тренда?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


А есть функция запрета открытия вручную ордера, например наблюдается бычьий тренд, а у меня вдруг на созвездий сошлись нептун с луной, небо покрылось серебрянной стружкой и гром ударил в нужное мгновение и появилась у меня волшебная мысль пойти против тренда. А советник постучав по папироске, стряхнув махорку с озябших рук, задумчиво произнес что это у меня помутнение рассудка и он(Советник) не дает добро на открытие ордера против тренда?



такого нет. максимум что ты можешь сделать - это снять галку в настройках "торговля в один клик", тогда у тебя перед открытием ордера будет появляться стандартное окно а не "на лету".
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



А есть функция запрета открытия вручную ордера, например наблюдается бычьий тренд, а у меня вдруг на созвездий сошлись нептун с луной, небо покрылось серебрянной стружкой и гром ударил в нужное мгновение и появилась у меня волшебная мысль пойти против тренда. А советник постучав по папироске, стряхнув махорку с озябших рук, задумчиво произнес что это у меня помутнение рассудка и он(Советник) не дает добро на открытие ордера против тренда?



такого нет. максимум что ты можешь сделать - это снять галку в настройках "торговля в один клик", тогда у тебя перед открытием ордера будет появляться стандартное окно а не "на лету".


А если советник повесить, прописать функцию
if(TrendUp==true)
{
OP_SELL=no_sell; // ну как нибудь запретить, нет ведь ничего невозможного!
}
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано




А есть функция запрета открытия вручную ордера, например наблюдается бычьий тренд, а у меня вдруг на созвездий сошлись нептун с луной, небо покрылось серебрянной стружкой и гром ударил в нужное мгновение и появилась у меня волшебная мысль пойти против тренда. А советник постучав по папироске, стряхнув махорку с озябших рук, задумчиво произнес что это у меня помутнение рассудка и он(Советник) не дает добро на открытие ордера против тренда?



такого нет. максимум что ты можешь сделать - это снять галку в настройках "торговля в один клик", тогда у тебя перед открытием ордера будет появляться стандартное окно а не "на лету".


А если советник повесить, прописать функцию
if(TrendUp==true)
{
OP_SELL=no_sell; // ну как нибудь запретить, нет ведь ничего невозможного!
}


ты пытаешься придумать что-то вроде "вот вышла с конвейера новая феррари, бак полный, уровень масла в норме, пробег 5к, у меня ключи зажигания в руках, можно как-то сделать так, чтобы при повороте ключа в замке зажигания ферарри не завелась?"

да, можно, выдерни витую пару из разъема RJ-45 и тогда ордер у тебя точно не откроется. еще можно комп выключить - тогда тоже не откроется.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...