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

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


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

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

ПОМОГИТЕ! для открытия сделки я использую функцию для определения нового бара

Спойлер


void Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=Time[0]; // Время текущего бара
New_Bar=false; // Нового бара нет
if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
}



затем в функции OnTick проверяю на наличие нового бара:
Спойлер

Fun_New_Bar(); // Обращение к ф-ии
if (New_Bar==false) // Если бар не новый..
return; // ..то уходим
if (New_Bar==true)
{
открываем сделку на покупку или продажу
}



за пределами оператора if(New_Bar==true)
{
}
я пишу условия модификации открытого ордера и частичного его закрытия:
Спойлер

if (Ask 0 && order_open==true)
{
for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL)
{
bool order_mod=OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), TP, 0);
bool order_close=OrderClose(OrderTicket(), 0.5*Lots, Ask, Slippage, Black);
order_open=false;
}
}
}
}



все вроде бы замечательно и компилятор не ругается, но есть маленькое НО: сделка у меня открывается на новой свече при соблюдении условий, которые там прописаны, и самое главное - модификация ордера при достижении центральной линии TMA с частичным закрытием ордера осуществляется так же на новой свече.

P.S. прикладываю картинку из тестора для наглядности. Синим отмечен правильная модификация или закрытие сделки, красным - которые были сделаны программой по факту.

Добавлено: 24-05-2014 21:26:17

выделил код той части советника, который не хочет корректно работать. (см вложенные файлы)

123.JPG
EA.mq4
EA.ex4

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

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

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

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

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

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

Перейти

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

Перейти

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

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

ПОМОГИТЕ!

Чего-же Вы хотели? Сами воткнули функцию закрытия под новый бар, а хотите чтобы закрывался на старом баре. Поймите - функция закрытия отрабатывает 1 раз по цене Опен 0-бара, потом бар сходил за линии индюка, но ф-ция закрытия об этом ничего не узнала...
Короче смотрите за ценами Опен и Вам станет всё ясно.
Ссылка на сообщение
Поделиться на другие сайты

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

Помогите кто нибудь, изучая курс споткнулся же на первом вводном уроке, компилятор выдает ошибку по одному фрагменту кода.
//+------------------------------------------------------------------+
//| Avto-Acceleration.mq4 |
//| ALEKSANDR |
//| |
//+------------------------------------------------------------------+
#property copyright "ALEKSANDR"
#property link ""
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
/*int x, y, z;
x = 1;
y = 8;
z = y - x;
Comment (z);*/
/*double x, y, z;
x = 645833555554556;
y = 356882568558868;
z = y - x;
Print (z);
Comment (z);*/


double X, Y , Z;
bool bb;

X = 0;
Y = 1;

if (X == 0) bb = true;
else bb = false

if (bb == true) Print ("Привет!");
else Print ("Пока!")

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

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

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

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

Close_Loss_v1_0_AUTO..mq4

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

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


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

Какой компилятор, какая ошибка, в какой строке? Что думаете по этому поводу? Мы-же здесь обучаться пытаемся, а не просто исправлять ошибки в чужом коде.
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Дак вот, интересует такой функционал, при закрытии части прибыльных ордеров, скажем половина полученной прибыли уходит в буфер и уже исходя из полученной суммы, тут же закрываются самые дальние ордера, тем самым сдвигая пирамиду. При этом первый ордер 0,01 закрывается полностью, а у всех остальных частичное закрытие по 0,01 пока хватает прибыли. Если на полный цикл не хватает, то он продолжается после очередного наполнения буфера, пока не переберёт всю пирамиду. Если прибыли получилось больше, то по проходу цикл начинается по новой, пока не произойдёт полное опустошение буфера.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
chistaia-rodina Я в Зерге делал следующее:
- при некой просадке (более средней по истории) включалась ф-ция частичного закрытия
- бот ждал откат не менее некого процента от всего движения
- считалась прибыль всех профитных ордеров и из неё вычитались лоссовые ордера начиная с первого. При этом можно было оставить прибыль (+) или закрывать в общий (-) - настраивалось.
- после этого все выбранные ордера закрывались. При этом если от всей пирамиды оставался один ордер, то он так-же закрывался в (-).

Я уже писал, что данная функция хорошо работала и иногда спасала депо, но сливалась там, где обычная сетка отрабатывала на ура... В итоге выключил.

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

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

Ну это понятно, что существует такая вероятность. Я же хочу конкретно узнать, реализуемо ли такое в коде и насколько сложно, просто ни где не встречалось именно такой функции, разве что в боте Hero есть нечто подобное, но там не совсем так и он гораздо агрессивнее.

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

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

Для xbms: Начал ручками пробовать запрограммировать хотя бы домашнее задание 1.5. Но даже с этим не справился...Поможете его выполнить?))

test1.mq4

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

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

День добрый!

Хотелось бы попросить Сергея Xbms записать серию уроков по новому mql4, в частности более подробно осветить ООП (урок 9 и 10 просмотрел, дз сделал) и его основные постулаты и особенности (инкапсуляция, наследование, полиморфизм, виртуальные функции, перегрузка, принципиальное отличие ссылки от указателя, поподробнее о конструкторах класса и т.к. далее). Также был бы не лишним урок по написанию пользовательского индикатора и графических объектов. 8->

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

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

Здарова!!! Народ а почему так происходит? Я выставил селстоп цена пошла вниз но он не сработал а сдвинулся ниже на 80 пунктов и там сработал ~x( :-? хотя спред был 33 пункта! это на золате!

Screen_Shot_2014-06-09_at_8.38.07_PM.png

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

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

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

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

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

Добрый день, подскажите,

Как написать функцию, которая возвращает тикет уже стоящего buy stop ордера и аналогично для sell stop ордера. ?


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

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

Примерно так:

int     f_GET_Order_Ticket(int oType)     //БайСтоп = OP_BUYSTOP = 4; OP_SELLSTOP = 5
{
for (int no=0; no {
if (!OrderSelect(no, SELECT_BY_POS, MODE_TRADES)) continue;
if (!(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic && OrderType() == oType)) continue;
return(OrderTicket());
}
}

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

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

Привет всем, господа подскажите как написать вот эту функцию что бы она не выдавала предупреждение от том что не явное преобразование строки в число. то есть
implicit conversion from 'string' to 'number'

Спойлер


int instrument;

int symbol(int otypex)
{
ticket = 0 ;
int oldticket;

for(int i =OrdersTotal()-1; i >= 0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if ( OrderMagicNumber() == Magic && OrderType() == otypex)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
instrument = OrderSymbol();
ticket = oldticket;
}
}
}
}
return(instrument);
}

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

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

Спасибо, функция понятна, но что значит OP_BUYSTOP = 4; и OP_SELLSTOP = 5
эти значения куда то надо подставлять?

как я понял функция перебирает ордера с помощью цикла for, но если ордеров несколько будет возвращать тикеты всех ордеров без разбора.

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

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


Привет всем, господа подскажите как написать вот эту функцию что бы она не выдавала предупреждение от том что не явное преобразование строки в число. то есть
implicit conversion from 'string' to 'number'


Я не понял: зачем Вы хотите присвоить числовой переменной строковое название символа?
Чтоб не ругалась вместо "int instrument;" пишите "string instrument;" (для 600 - возможны варианты)
Вы здесь не раз задавали вопросы и получали ответы - обратной реакции нет - поняли/нет...
Ссылка на сообщение
Поделиться на другие сайты

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


Спасибо, функция понятна, но что значит OP_BUYSTOP = 4; и OP_SELLSTOP = 5
эти значения куда то надо подставлять?

OP_BUYSTOP = 4; Это название константы и её значение - можете использовать оба значения - без разницы (правильнее использовать OP_BUYSTOP, т.е. название константы, во избежании проблем перекомпиляции в других билдах)

как я понял функция перебирает ордера с помощью цикла for, но если ордеров несколько будет возвращать тикеты всех ордеров без разбора.

Нет, только первого найденного - мы же не в курсе логики Вашего бота, как он ставит ордера и сколько нам не ведомо. И что значит "без разбора"? - сортировка по символу, магику и типу не устраивает?
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

у меня маленький вопрос: Как избавиться от этих предупреждений (return value of 'OrderModify' should be checked, и return value of 'OrderClose' should be checked?

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

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

у меня маленький вопрос: Как избавиться от этих предупреждений (return value of 'OrderModify' should be checked, и return value of 'OrderClose' should be checked?

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

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


у меня маленький вопрос: Как избавиться от этих предупреждений (return value of 'OrderModify' should be checked, и return value of 'OrderClose' should be checked?

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

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

Например

bool Rezultat = OrderModify(...............);

Т.е. просто надо присвоить результат ф-ции левой переменной, а эту перменную можно потом не использовать.

При успешном выполнении будет - true

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

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

Доброго здоровья всем!
Долго искал этот курс, но пока искал МетаЭдитор стал на MQL5
и теперь видео урок не сочетаются с МетаЭдитором.
Подскажите пожалуйста как решить эту задачку,
перевести МетаЭдитор на MQL4?

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

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


перевести МетаЭдитор на MQL4?

Скачайте терминал 509 билда (есть в Гугле и в этом блоге)После распаковки терминала в директории будет старый Метаэдитор
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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