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

От xbms, 13 апреля, 2013 в Уголок Программиста

#4176

У одного брокера идет модификация ордеров, у другого ошибка 130.



А у этих брокеров котировки сколько имеют знаков после запятой? Может у вас отсутствует в коде приведение к новым пунктам. "Ошибка 130" чаще всего это математическая ошибка в расчетах. Если у вас на 4 знаке все работает, а на 5 знаке ошибка, то возможно дело в таком куске кода.

int OnInit()
{
if(Digits == 3 || Digits == 5)
{
Slippage *= 10;
TakeProfit *= 10;
StopLoss *= 10;
}
return(INIT_SUCCEEDED);
}
#4177

по моему вопросу ответ так и не нашёлся, жаль! Что вы думаете я не смотрел этот курс.......
по второму вопросу ...... зачем так усложнять ..... я зашёл узнать ответ на мой вопрос и натыкаюсь на какие та тех. проблемы, это я на счёт загрузки картинки, сейчас искать мне надо какой то бесплатный холстинг, что то там ещё делать...... и я уже забыл для чего я сюда пришёл......, хотя сайт мне очень нравится!!!!


Добавлено: 11-02-2017 12:35:22

И почему меня постоянно выкидывает с ветки, когда я отправляю сообщение?надо опять заходить ..
#4178
Цитата

по моему вопросу ответ так и не нашёлся, жаль!



Ваш вопрос:

Цитата

расскажите мне пожалуйста на людском языке как надо правильно писать функцию OnInit? OnDeinit,OnTick и где надо ставить void,где после return надо скобки, где ноль в скобках, короче у меня такая каша в голове. С учебника просто повторял код , там конечно int start() и всё в таком духе, перевёл на On Init и всё хана куча ошибок. Помогите!!!!!



Эту звучит как: "Расскажите мне по-быстренькому как там бота на MQL4 написать, а то я не знаю". Я поэтому и дал вам ссылку на этот курс, потому что на мой взгляд это самый простой и быстрый способ найти ответ на свой вопрос. Но вы решили ни чего не изучать и написать, что вам не дали ответа на ваш вопрос. Если вы не знаете, что такое OnInit, OnDeinit, OnTick, не знает где и как ставить скобки, то может вам стоит начать с самых азов, потому что это основа. Без понимания этого нет смысла пытаться, что то написать на MQL4.

OnInit - выполняется один раз при запуске советника, OnDeinit - выполняется один раз при завершении работы советника, OnTick - выполняется на каждом тике. Этот ответ вам вряд ли прояснит "кашу в голове".

Цитата

это я на счёт загрузки картинки



Добавьте картинку как приложение к сообщению и всё. Зачем усложнять)))
#4179

Alexandrkas, Вы привели код процедуры OnInit(). У меня он прописан именно так, как у Вас. Работает на пятизнаке нормально (weltrade), на четырехзнаке у forex4you дает ошибку 130. Сегодня столкнулся на пятизнаке с ошибкой 131 у брокера - GerchikCo. Самое поганое, что это все в тестере на демо счетах. Если кто-нибудь имеет опыт обхода таких ситуаций - подскажите?

#4180

Уважаемые форумчане, по видео _https://www.youtube.com/watch?v=63REtIKc4gQ (это написание советника на TMA_Fair, написал свой и имею сейчас такую непонятку
ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,vSpread,0,0,"TMA_BB",MagicNumber,0,Red);
if(ticket>0)
{
SL=NormalizeDouble(Bid+StopLoss*Point,Digits);
TP=NormalizeDouble(Bid-TakeProfit*Point,Digits);
if(OrderSelect(ticket,SELECT_BY_TICKET)) OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
}
Код взят из урока. У одного брокера идет модификация ордеров, у другого ошибка 130. Подскажите, как разрулить такую ситуацию?



Добрый день!
функция OrderModify пытается изменить стоп-лосс или тейк-профит слишком близко к текущей цене. Нормализуйте SL и TP к стоплевелу брокера.

Цитирую справку
Спойлер

Цитата

Цены StopLoss и TakeProfit не могут располагаться слишком близко к рынку. Минимальное расстояние стопов в пунктах можно получить, используя функцию MarketInfo() с параметром MODE_STOPLEVEL. В случае ошибочных, а также ненормализованных стопов генерируется ошибка 130 (ERR_INVALID_STOPS). Нулевое значение MODE_STOPLEVEL означает либо отсутствие ограничения на минимальную дистанцию для стоп-лосса/тейк-профита, либо факт использования торговым сервером внешних механизмов динамического контроля уровней, которые не могут быть транслированы в терминал. Во втором случае GetLastError() может возвращать ошибку 130, так как уровень MODE_STOPLEVEL фактически является "плавающим".

#4181

Уважаемые программисты. Может ли кто нибудь создать канальный индикатор по следующим параметрам:
Индикатор должен в окне графика отображать 5 каналов по Open/Close, каждый канал, чтобы по возможности был цветоизменяемым.
Если используем индикатор на M1 ТФ, то индикатор строит(допустим сейчас время 9:00):
M1 канал по Open/Close каждой свечи начиная с 9:00 до 10:00;
M5 канал по Open/Close каждой 5ой свечи начиная с 9:00 до 10:00;
М15 канал по Open/Close каждой 15ой свечи начиная с 9:00 до 10:00;
М30 канал по Open/Close каждой 30ой свечи начиная с 9:00 до 10:00;
H1 канал по Open/Close 9ти и 10 часовой свечи. И со следуещего часа всё начинается по новой.

P.S. Если криво обозначил ТЗ прошу извинить.
Если кто то сможет создать данный индикатор, то я был бы очень благодарен вам.
Заранее спасибо

Изменено 12 февраля, 2017 пользователем Камолиддин

#4182

Добавлено: 12-02-2017 08:18:01

Написал свой первый советник для торговли на Форекс в Metatrader 4 .Использовал для этого его MetaEditor.Помоги,пожалуйста, разобраться.Советник в
тестере «по ценам открытия» работает хорошо. Но на Демо счете, на контрольных точках и всех тиках в тестере — выставляет до 500 ордеров за несколько секунд, а за день — 2-3 пачки таких ордеров.Как сделать, чтобы на Демо и реальном счете он выставлял 1 ордер на Д1?


Добавьте в коде подсчет количества ордеров:
Код: [Выделить]
//Подсчет Sell и Buy ордеров
int CountSell=0, CountBuy=0;
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY) CountBuy++;
if(OrderType()==OP_SELL) CountSell++;
}
И проверку:
Код: [Выделить]
if(CountBuy==0 и есть сигнал на покупки) {открываем ордер buy}
if(CountSell==0 и есть сигнал на продажи) {открываем ордер sell}




Спасибо тебе,ilnur17021992, за совет!!!
Только у меня, когда я вставляю подсчет количества ордеров и проверку, редактор "ругается"(см.скрин).Может я это не туда вставляю или не так? Ума не хватает как сделать, а в Интернете не могу найти.Будь добр,добавь в советник в нужное место или подробно напиши куда и как

Ошибка.jpg
DMB.mq49 скач.

Изменено 12 февраля, 2017 пользователем iket

#4183

Код нужно поместить внутрь функции. У тебя же он просто лежит между функциями.

#4184


Добавлено: 12-02-2017 13:18:22

Код нужно поместить внутрь функции. У тебя же он просто лежит между функциями.



В том то и дело. что я не знаю как - я новичок

Изменено 12 февраля, 2017 пользователем iket

#4185

Так тебе надо ещё азы программирования подучить, а ты уже за написание советника взялся.

К примеру так можно:

bool IsOrderOpened(int Order_Type)
{
int CountSell=0, CountBuy=0;
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY) CountBuy++;
if(OrderType()==OP_SELL) CountSell++;
}
if(CountBuy != 0 && Order_Type == OP_BUY)
return(true);

if(CountSell != 0 && Order_Type == OP_SELL)
return(true);

return(false);
}


#4186

Добрый всем вечер.
Есть индикатор "!FT PANEL". Прикладываю.
Если его запустить то получим примерно такую картину:

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

FT_PANEL.mq47 скач.

#4187

Панель нарисована с помощью шрифта Webdings. Он вместо обычных печатных символов рисует различные значки. Только вот не пойму в каком месте панель полупрозрачная? :-/ График под ней не просматривается. Было бы гораздо правильней, на мой взгляд, не мучиться с Webdings, а нарисовать прямоугольник с помощью стандартных возможностей MQL. А вот чтобы он стал полупрозрачным, его нужно "рисовать объект как фон".

#4188

Если не затруднит, киньте сюда кусок кода который отвечает за этот прямоугольник.
Полупрозрачный вот:

Еще вопрос: Где в коде лейбл "ALPHA TRADER", который в заголовке?

#4189

Если не затруднит, киньте сюда кусок кода который отвечает за этот прямоугольник.


Строки 105-133 (создание объектов).

Еще вопрос: Где в коде лейбл "ALPHA TRADER", который в заголовке?


Строки 139 и 142.

Прозрачность в данном индикаторе достигается путем включения свойства "График сверху" в настройках терминала: F8 -> вкладка "Общие".

Изменено 15 февраля, 2017 пользователем SilverKZ

#4190


Панель нарисована с помощью шрифта Webdings. Он вместо обычных печатных символов рисует различные значки. Только вот не пойму в каком месте панель полупрозрачная? :-/ График под ней не просматривается. Было бы гораздо правильней, на мой взгляд, не мучиться с Webdings, а нарисовать прямоугольник с помощью стандартных возможностей MQL. А вот чтобы он стал полупрозрачным, его нужно "рисовать объект как фон".



Выложите, пожалуйста, для примера, простенький индикатор с прямоугольником, нарисованным с помощью стандартных возможностей MQL. Или киньте ссылку на такой. Заранее спасибо.
#4191


Выложите, пожалуйста, для примера, простенький индикатор с прямоугольником, нарисованным с помощью стандартных возможностей MQL. Или киньте ссылку на такой. Заранее спасибо.



Вот что-то состряпал побырому, чисто для примера скрипт.

Square.mq46 скач.

#4192

Подскажите пожалуйста.
Как из совы сделать проверку - открыт ли в терминале график нужного инструмента, а если не открыт, то открыть и построить на нем горизонтальную линию.

#4193
Цитата

Подскажите пожалуйста.
Как из совы сделать проверку - открыт ли в терминале график нужного инструмента, а если не открыт, то открыть и построить на нем горизонтальную линию.



Вот для примера такой скрипт накидаем:
extern string          chartSymbol="EURUSD";
extern ENUM_TIMEFRAMES chartTF=PERIOD_M1;
//---------------------------------------------------------
void OnStart()
{
if(WindowHandle(chartSymbol,chartTF)==0)
{
long id=ChartOpen(chartSymbol,chartTF);
if(id>0)
{
int step=10;
if(Digits==5||Digits==3)step*=10;
double linePrice=SymbolInfoDouble(chartSymbol,SYMBOL_BID)-step*Point;
//рисуем линию
ObjectCreate(id,"Line",OBJ_HLINE,0,0,linePrice);
ObjectSet("Line",OBJPROP_STYLE,2);
ObjectSet("Line",OBJPROP_COLOR,clrRed);
ObjectSet("Line",OBJPROP_WIDTH,1);
ObjectSetInteger(id,"Line",OBJPROP_SELECTABLE,true);
ObjectSetInteger(id,"Line",OBJPROP_HIDDEN,false);
ObjectSetInteger(id,"Line",OBJPROP_STYLE,0);
}
}
}


#4194


Всем доброго времени суток!
У меня следующая проблема - не могу разобраться как сделать, чтобы на открытие каждой свечи открывались ордера. не важно какие, условие смогу прописать. А вот именно, чтоб на открытии - у меня не получается. Буду очень признателен за помощь!


Вот функция определения нового бара. Если появился новый бар, то выдает true.
//Функция определения нового бара
//Функция возвращает истину (true) если это не первый запуск и пришел новый тик нового бара
bool Fun_New_Bar()// Ф-ия обнаружения нового бара
{
static datetime Prev_Time=0;// Время текущего бара
if(Prev_Time==0)//если предварительное время равно 0
{
Prev_Time=Time[0];//если предвар. время равно времени нулевого бара, то это первый запуск функции
return(false);//возвращаем ложь
}
if(Prev_Time!=Time[0])//если предвар. время не равно времени нулевого бара, то есть новый бар
{
Prev_Time=Time[0];//Поймался новый бар, присваиваем предв. времени время нового бара
return(true);//есть новый бар, возвращаем истину
}
return(false);
}


Получается так: if(Fun_New_Bar() == true) есть новый бар -> вход
#4195

Можно использовать условие volume[0]


Добавлено: 17-02-2017 14:47:03

DreamWorks


Огромное спасибо за ответ. Но непонятно почему не реагирует линия на смену цвета и стиля

Изменено 17 февраля, 2017 пользователем alex32926

#4196

Но непонятно почему не реагирует линия на смену цвета и стиля


Пардон. Неправильно немного написал... Вот так правильно:

//рисуем линию
ObjectCreate(id,"Line",OBJ_HLINE,0,0,linePrice);
ObjectSetInteger(id,"Line",OBJPROP_COLOR,clrAqua);
ObjectSetInteger(id,"Line",OBJPROP_SELECTABLE,true);
ObjectSetInteger(id,"Line",OBJPROP_HIDDEN,false);
ObjectSetInteger(id,"Line",OBJPROP_STYLE,4);
#4197

Индикатор Williams percent Range, надо чтобы сова продавала на ВЫХОДЕ из зоны перекупленности и покупала на ВЫХОДЕ из перепроданности. Хотя бы логически как это сделать, не понимаю. Ну и если не лень то кодом)

Изменено 18 февраля, 2017 пользователем viktor004

#4198

Уважаемые специалисты. При переключении ТФ, индикатор стирает построенные мной наклонные линии /горизонтальные не трогает/.
Большая просьба - устраните пожалуйста этот недостаток.


MultiInstrument.mq43 скач.

#4199


Индикатор Williams percent Range, надо чтобы сова продавала на ВЫХОДЕ из зоны перекупленности и покупала на ВЫХОДЕ из перепроданности. Хотя бы логически как это сделать, не понимаю. Ну и если не лень то кодом)


Сваял на скорую руку :).

WilliamsPercentRange_BOT.mq47 скач.
WilliamsPercentRange_BOT.ex41 скач.

Изменено 18 февраля, 2017 пользователем ilnur17021992

#4200


Уважаемые специалисты. При переключении ТФ, индикатор стирает построенные мной наклонные линии /горизонтальные не трогает/.
Большая просьба - устраните пожалуйста этот недостаток.



Исправлено :).

MultiInstrument.mq42 скач.
MultiInstrument.ex41 скач.

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

Перейти к списку тем
Форум · 2.0.20260627.0025