Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1230
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ошибок много в Вашем примере
должно быть:
тут цены не нормализованные OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,"My order",MagicNumber,0,clrGreen);
тут вообще не понятна логика зачем выход из OnTick() если условие ложное
наверное нужно продолжить цикл перебора ордеров и просто посчитать сколько ордеров
имхо, или топик с "Только полезные функции от КимIV" поиском найдите или в КБ посмотрите как делают советников с подсчетом ордеров и выставлением новых ордеров, Ваш пример очень прямолинеен в логике и в дальнейшем его сложно будет модифицировать под другие задачи... ну может быть трейлинг он захочет прикрутить
Это еще рано)))) Сразу много будет. Там со смыслом не до понимание))))) А так да, конечно после вычислений для всего что сендордер нормализация необходима)))
Там условие по заказу, если на текущем инструменте нет ордеров с нашим магик, выставляем ордер. А потом условие будет не доходить до выставления ордера, пока он не закроется.
ПС не люблю условие Если не.
Приветствую! Подскажите, как правильно читается выражение
Приветствую! Подскажите, как правильно читается выражение
Если переменная symbol пустая то вернуть значение текущего симовола графика в переменную sym , а если не пустая то передать ее значение в переменную sym
Если переменная symbol пустая то вернуть значение текущего симовола графика в переменную sym , а если не пустая то передать ее значение в переменную sym
Благодарю!
Приветствую! Подскажите, как правильно читается выражение
Читается так: Присвоить переменной значение Symbol() если symbol равен NULL иначе присвоить значение symbol.
Эквивалент этой записи
Разница только в количестве строк.Читается так: Присвоить переменной значение Symbol() если symbol равен NULL иначе присвоить значение symbol.
Эквивалент этой записи
Разница только в количестве строк.Спасибо!
А что тогда, у вас например открыто окно не евробакс, а еврофунт, вы сравниваете символ выбранного ордера с евробаксом, если истина, значит на евробаксе есть ордер, и если и с нашим магик, то ретурн из функции Онстарт, а если нет, то выставляем ордер на евробаксе, но клоз, Хай, аск, бид у вас будут для еврофунт. будет ошибка при открытии ордеров, так как бид и аск для этих инстументов разные. А Symbol() возвратит символ текущего окна и ошибки не возникнет.
И используйте шаблон из метаэдитор, там есть кнопочка Создать слева вверху. Функцию онстарт используют до сих пор, но это не правильно, а ОнСтарт это для скриптов. Правильный шаблон.
Правильный код. У Вас пропущен комментарий к ордеру, и магик в вашем коде не учитывается. В предупреждениях к строке открытия замечание Неявное приведение типа числа к строке!!!
Да, работает, как надо. Спасибо!
Не знал что так важно создавать по шаблону. ОнСтарт- действительно. Основная структура у меня неправильная была. Что ж, теперь буду знать.
Да, работает, как надо. Спасибо!
Не знал что так важно создавать по шаблону. ОнСтарт- действительно. Основная структура у меня неправильная была. Что ж, теперь буду знать.
Ну и все что вставляете в функции работы с ордерами надо нормализовывать. Если после запятой будет 6 знаков на пятизнаке, ордер не выставится и выдаст ошибку.
топик с "Только полезные функции от КимIV" поиском найдите или в КодоБазе поищите.
Igor Makanu написал выше еще ошибки. А с функций Кима действительно полезно начинать. Понятные комменты.
Помогите плиз. Почему при тестировании выдает ошибку - "" 2020.08.13 13:09:11.393 2018.08.01 00:00:00 123456 GBPUSD,M30: array out of range in '123456.mq4' (59,13)""" ????
#property copyright "2020, Grey."
#property link "uirnP0215@mail.ru"
#property version "1.00"
#property strict
input double lots = 0.01;
input int Magic = 1546;
double ibufUP[];
double ibufDN[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
CountFractals();
if(ibufUP[3]>0)
{
if(!OrderSend(Symbol(), OP_SELL, lots, Bid, 30, 0, 0, "", Magic, 0, clrRed))
Print("Не удалось открыть ордер на продажу");
}
if(ibufDN[3]>0)
{
if(!OrderSend(Symbol(), OP_BUY, lots, Bid, 30, 0, 0, "", Magic, 0, clrGreen))
Print("Не удалось открыть ордер на покупку");
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void CountFractals()
{
for(int i=150; i>=0; i--)
{
ibufUP[i] = iFractals(NULL, 0, MODE_UPPER, i);
ibufDN[i] = iFractals(NULL, 0, MODE_LOWER, i);
}
}
//+------------------------------------------------------------------+
Помогите плиз. Почему при тестировании выдает ошибку - "" 2020.08.13 13:09:11.393 2018.08.01 00:00:00 123456 GBPUSD,M30: array out of range in '123456.mq4' (59,13)""" ????
#property copyright "2020, Grey."
#property link "uirnP0215@mail.ru"
#property version "1.00"
#property strict
input double lots = 0.01;
input int Magic = 1546;
double ibufUP[];
double ibufDN[];
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
CountFractals();
if(ibufUP[3]>0)
{
if(!OrderSend(Symbol(), OP_SELL, lots, Bid, 30, 0, 0, "", Magic, 0, clrRed))
Print("Не удалось открыть ордер на продажу");
}
if(ibufDN[3]>0)
{
if(!OrderSend(Symbol(), OP_BUY, lots, Bid, 30, 0, 0, "", Magic, 0, clrGreen))
Print("Не удалось открыть ордер на покупку");
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void CountFractals()
{
for(int i=150; i>=0; i--)
{
ibufUP[i] = iFractals(NULL, 0, MODE_UPPER, i);
ibufDN[i] = iFractals(NULL, 0, MODE_LOWER, i);
}
}
//+------------------------------------------------------------------+
Для начала в ф-ции CountFractals счетчик декремента поставь.