как написать программу робота для торговли в терминале метатрейдер на языке програмирования MQL-5
- MetaEditor - профессиональный редактор торговых приложений
- Разработка приложений на MetaQuotes Language 5 (MQL5)
- Моментальные уведомления (алерты, Alert) в MetaTrader 5
для начала вопрос как задать функцию открытия сделки ? или написать ей . если есть сигнал .сигнал какой пока не обговаривается и от чего .
Программы пишутся в редакторе кодов MetaEditor.
Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы
Самый простой код:
//+------------------------------------------------------------------+ //| Simple adviser Open position.mq5 | //| Copyright © 2019, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2019, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.000" //--- #include <Trade\Trade.mqh> CTrade m_trade; // trading object //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- m_trade.Buy(1.0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+
Блок
//--- #include <Trade\Trade.mqh> CTrade m_trade; // trading object
подключает библиотеку (пока не думайте об этом слове, просто так надо) и создаёт объект библиотеки.
А вот это
int OnInit() { //--- m_trade.Buy(1.0); //--- return(INIT_SUCCEEDED); }
и есть команда "Открыть позицию BUY по текущему символу объёмом 1.0 лот".

- www.metatrader5.com
для начала вопрос как задать функцию открытия сделки ? или написать ей . если есть сигнал .сигнал какой пока не обговаривается и от чего .
Дорогу осилит идущий.
Чтобы научиться писать программы - надо их писать.
Начинай с КодоБазы - бери самый простой эксперт, гляди, как там написано, сверяйся со справкой, и делай так же, что непонятно - спрашивай в форуме.
А так вот, на пустом месте спрашивать "как" - довольно глупо. В программировании, как и в геометрии нет "царского" пути...
допустим у меня такой алгоритм . если имеется свеча равная заданному значению double q / тогда функция открытия .как это прописать в коде ?
допустим у меня такой алгоритм . если имеется свеча равная заданному значению double q / тогда функция открытия .как это прописать в коде ?
Лучше размер свечи задавать в целых величинах (пунктах, пипсах и тому подобное):
//+------------------------------------------------------------------+ //| Simple adviser Open position.mq5 | //| Copyright © 2019, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2019, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.001" //--- #include <Trade\Trade.mqh> CTrade m_trade; // trading object //--- input parameters input ushort InpMinimumCandleHeight = 15; // Minimum Candle Height, in pips (1.00045-1.00055=1 pips) //--- double m_minimum_candle_height = 0.0; // Minimum Candle Height -> double
и сразу объявить переменную m_minimum_candle_height - в ней будет хранится минимально заданная величина свечи пересчитанная в double
В OnInit() вычисляем эту переменную:
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- m_minimum_candle_height = InpMinimumCandleHeight * Point(); //--- return(INIT_SUCCEEDED); }
Остаётся в OnTick() проверить два условия: если нет позиций и размер свечи больше заданного - открываем позицию BUY. Чтобы получить размер свечи применяем CopyRates, вариант
Обращение по начальной позиции и количеству требуемых элементов
int CopyRates( string symbol_name, // имя символа ENUM_TIMEFRAMES timeframe, // период int start_pos, // откуда начнем int count, // сколько копируем MqlRates rates_array[] // массив, куда будут скопированы данные );
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(PositionsTotal()>0) return; MqlRates rates[]; ArraySetAsSeries(rates,true); int start_pos=0,count=3; if(CopyRates(Symbol(),Period(),start_pos,count,rates)!=count) return; if(MathAbs(rates[0].open-rates[0].close)>m_minimum_candle_height) m_trade.Buy(1.0); }
В массив rates поступают исторические данные свечи. Сразу массиву применяем ArraySetAsSeries(rates,true) -> чтобы элемент с индексом 0 в массиве соответствовал самому правому бару на графике (текущему бару).

- www.mql5.com
мне знания нужны хочу понять как устроено .

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования