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

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


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

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

Метаквоты делаю разную степень защиты декомпила для маркета и терминала?

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

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Разъясню простую истину. Если код запускается локально то это лишь вопрос времени, когда его вскроют, если он конечно кому-то нужен.

Если ваш код, это советник на двух индикаторах - такое никто смотреть не будет в попытках завладеть ноу-хау.

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

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

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

 Здравствуйте! Мне нужен советник или рабочая функция открытия отложенных ордеров . Я учусь и хочу к этой функции попробовать прикрутить трал. Спасибо.  

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

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

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

Всем  привет. Функция поиска фрактала в индикаторе пропускает некоторые фракталы, которые находит при использовании в советнике. Не могу понять почему...

Вот так она используется в индикаторе:

//+--------------------------------------------------------------------+
double FrUP()                                         // возвращает значение фрактала из BarsForFractal баров
{
   double UpFr=0,Fr=0; int indxUpFr;
   
   indxUpFr = iHighest (Symbol(),0,MODE_HIGH,BarsForFractal,i);
   if (indxUpFr==i+(BarsForFractal+1)/2) UpFr = iHigh (Symbol(),0,i+(BarsForFractal+1)/2); 
   else UpFr=0;
   
   if (UpFr!=0) Fr=UpFr;
   
   return (Fr);
}

Вот так в советнике:

double FrUP()                                      
{
   double UpFr=0,Fr=0; int indxUpFr;
   
   indxUpFr = iHighest (Symbol(),0,MODE_HIGH,BarsForFractal,1);
   if (indxUpFr==(BarsForFractal+1)/2) UpFr = iHigh (Symbol(),0,(BarsForFractal+1)/2); 
   else UpFr=0;
   
   if (UpFr!=0) Fr=UpFr;
   
   return (Fr);
}
//BarsForFractal отвечает за количество баров во фрактале

Можно ли что либо предположить навскидку?

Подобным образом ведёт себя другая индикаторная функция на основе среднего. Может тут какой-то общий момент есть?

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

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

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

void OnStart()
  {
    int ticket, TakeProfit = 500;
    double TP, value = NormalizeDouble(WindowPriceOnDropped(),Digits);
    
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=Symbol()) continue;
      
      ticket = OrderTicket();
      if(OrderType()==OP_BUY)    
      if(value>Ask)
      {  
       TP=NormalizeDouble(Ask+TakeProfit*Point,Digits); 
       bool res=OrderModify(ticket,OrderOpenPrice(),0,TP,0);
      }
      
      if(OrderType()==OP_SELL)
      if(value<Bid)
      {
       TP=NormalizeDouble(Bid-TakeProfit*Point,Digits); 
       bool ressel=OrderModify(ticket,OrderOpenPrice(),0,TP,0);
      }
   }     
   
  }

 

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

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

Напиши Принты внутри цикла- может у тебя не выполняется условие

if(value<Bid)
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите, как проверить откат между двум точками. На вход подпрограмма получает только 2 величины  а ответ 1(если есть откат) либо 0. Чуть позже выложу свой вариант кода. 

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

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

Добрый день уважаемые программисты! Подскажите, пожалуйста, есть ли возможность готовый индикатор для терминала MetaTrader4 внедрить в терминал TradingView?

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
В 31.10.2020 в 15:24, sergey.mihaylovich сказал:

Подскажите, пожалуйста, есть ли возможность готовый индикатор для терминала MetaTrader4 внедрить в терминал TradingView?

Нужно знать язык программирования Pine и иметь открытый код индикатора в формате mq4. Ну либо найти такого программиста, который знает эти оба языка. Создайте платное задание на сайте MQL5 во вкладке фриланс.

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

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

Добрый день. Подскажите как найти в сетке открытых ордеров ордер с большим убытком. Ордера открываются одновременно sell и buy и разными размера лота. MQL4

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

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

Добрый день. Подскажите как найти в сетке открытых ордеров ордер с большим убытком. Ордера открываются одновременно sell и buy и разными размера лота. MQL4

int OrderMinProfit(int oType = -1)// -1 - проверяем все типы ордеров, иначе передаем тип ордера для поиска с мин. профитом
{
   double oMinProfit = 9999999.0;
   int    oTicketTmp = 0;
   
   for(int i = 0;i < OrdersTotal();i++)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderSymbol()!=_Symbol || OrderMagicNumber() != iMagic) continue;
      if(oType >-1 && OrderType() !=oType) continue;
      
      if(OrderProfit()< oMinProfit)
      {
         oMinProfit = OrderProfit();
         oTicketTmp = OrderTicket();
      }
   }
   
   return(oTicketTmp);
}
  

была ошибка - два return. Поправил

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

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

int OrderMinProfit(int oType = -1)// -1 - проверяем все типы ордеров, иначе передаем тип ордера для поиска с мин. профитом
{
   double oMinProfit = 9999999.0;
   int    oTicketTmp = 0;
   
   for(int i = 0;i < OrdersTotal();i++)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderSymbol()!=_Symbol || OrderMagicNumber() != iMagic) continue;
      if(oType >-1 && OrderType() !=oType) continue;
      
      if(OrderProfit()< oMinProfit)
      {
         oMinProfit = OrderProfit();
         oTicketTmp = OrderTicket();
      }
   }
   
   return(oTicketTmp);
}
  

была ошибка - два return. Поправил

Ну только oTicketTmp нужно инициализировать отрицательным числом.

Ноль - это возможный номер тикета, согласно контракту https://docs.mql4.com/trading/ordersend 

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

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

@Rigal как вы делаете погрузку истории? В частности в этом советнике https://tlap.com/forum/laboratoriya-profitfx/24/sovetnik-multivaljutnik-korzhik/21628/

Буду благодарен за участок кода в качестве примера.

Столкнулся с проблемой когда терминал врет о запрашиваемых данных. 

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

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

@Rigal как вы делаете погрузку истории? В частности в этом советнике https://tlap.com/forum/laboratoriya-profitfx/24/sovetnik-multivaljutnik-korzhik/21628/

Буду благодарен за участок кода в качестве примера.

Столкнулся с проблемой когда терминал врет о запрашиваемых данных. 

В аттаче библиотечка - я выкусил из нее все зависимости на остальные мои библиотеки.

HistoryLoader.mqh

Используется так:

#include <HistoryLoader.mqh>
HistoryLoader* loader;

int OnInit() {
  loader = new HistoryLoader(Symbol());
}

void OnDeinit(const int reason)  {
  if(CheckPointer(loader) == POINTER_DYNAMIC)
  	delete (loader);
}

void OnTick() {
  //whatever code you have here
  loader.CheckReload();
}

В библиотеке прописан интервал проверки - загрузка будет выполняться только раз в этот интервал.

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

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

Добрый день уважаемые знатоки! Подскажите, пожалуйста. Возможно ли уже готовую торговую систему под MT4 переделать под платформу TradingView?

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
6 минут назад, sergey.mihaylovich сказал:

Добрый день уважаемые знатоки! Подскажите, пожалуйста. Возможно ли уже готовую торговую систему под MT4 переделать под платформу TradingView?

Да.

вам нужен исходник в мт4, человек, который знает оба языка и немного времени.

Насколько я знаю, автоматических решений нет

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
2 минуты назад, sergey.mihaylovich сказал:

Добрый день уважаемые знатоки! Подскажите, пожалуйста. Возможно ли уже готовую торговую систему под MT4 переделать под платформу TradingView?

Ну конечно можно.

  • Нужен открытый исходный код системы (расширение файла *.mq4) или как минимум подробную логику работы системы.
  • Человек знающий языки программирования MQL (от MetaTrader) и Pine (от TradingView).
  • Лайк 1
  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день. По мотивам урока "Использование структур для повышения эффективности разработки программ" воодушевился применением функции внутри структуры и создал вот такую простейшую конструкцию в МТ5.

#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
#include <Trade\PositionInfo.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
#include <Trade\DealInfo.mqh>
#include <Expert\Money\MoneyFixedMargin.mqh>

CPositionInfo      m_position;// object of CPositionInfo class
COrderInfo         m_order;   // object of COrderInfo class
CTrade             m_trade;   // object of CTrade class
CSymbolInfo        m_symbol;  // object of CSymbolInfo class
CAccountInfo       m_account; // object of CAccountInfo class
CDealInfo          m_deal;    // object of CDealInfo class
CMoneyFixedMargin *m_money;   // object of CMoneyFixedMargin class
//+------------------------------------------------------------------+
//| Structure Positions                                              |
//+------------------------------------------------------------------+
struct STRUCT_POSITION
  {
   ENUM_POSITION_TYPE type;       // тип позиции
   ulong              ticket;     // тикет позиции
   long               identifier; // идентификатор
   long               magic;      // магический номер
   double             volume;     // объем позиции
   double             open_price; // цена открытия
   datetime           open_time;  // время открытия
   double             profit;     // профит позиции
   double             comission;  // комиссия
   double             swap;       // своп
   string             comment;    // комментарий
   
   void               GetCurrentPositionProperty();
  };
  STRUCT_POSITION StrPositionArray[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   STRUCT_POSITION.GetCurrentPositionProperty();
  }
//+------------------------------------------------------------------+
//---Заполнение массива свойств позиций                              +
//+------------------------------------------------------------------+
void STRUCT_POSITION::GetCurrentPositionProperty(void)
{   
   ZeroMemory(this);
   int pos_total = PositionsTotal();
   ArrayResize(StrPositionArray,pos_total,1000);
   for(int i=0; i<pos_total; i++)
      {
         if(m_position.SelectByIndex(i))
            {
               StrPositionArray[i].ticket     = m_position.Ticket();                  // тикет позиции
               StrPositionArray[i].identifier = m_position.Identifier();              // идентификатор
               StrPositionArray[i].magic      = m_position.Magic();                   // магический номер
               StrPositionArray[i].comment    = m_position.Comment();                 // комментарий
               StrPositionArray[i].type       =(ENUM_POSITION_TYPE)m_position.PositionType();// тип позиции
               StrPositionArray[i].volume     = m_position.Volume();                  // объем позиции
               StrPositionArray[i].open_price = m_position.PriceOpen();               // цена открытия
               StrPositionArray[i].open_time  = m_position.Time();                    // время открытия
               StrPositionArray[i].profit     = m_position.Profit();                  // профит позиции
               StrPositionArray[i].comission  = m_position.Commission();              // комиссия
               StrPositionArray[i].swap       = m_position.Swap();                    // своп
            }
      } 
} 
//+------------------------------------------------------------------+

Компилятор выдает ошибку " '.' - name expected "

Подскажите плиз, что я сделал неправильно и как с этим бороться ???

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

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

В структуре

STRUCT_POSITION

присутствует метод 

GetCurrentPositionProperty(void)

который рассчитывает и присваивает значения элементам структуры. Определяем тело метода вне структуры. Для этого используем операцию разрешения контекста (::).

В OnTick() вызываем фунцию:

 

void OnTick()
  {
//---
   STRUCT_POSITION.GetCurrentPositionProperty();
  }

И получаем ошибку:

'.' - name expected    eSower_and_Gather_5.mq5    69    19
Где накосячено не понимаю, помогите плиз.

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

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

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

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
3 часа назад, Just Trader сказал:

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

 

Советники

https://trueforex.pp.ua/

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

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

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

Есть ли способ работать с файлами не из "песочницы"?

Пробовал делать как описано здесь: https://www.mql5.com/ru/articles/1540 . Набросал скрипт:

 

#property copyright ""
#property link      ""
#property version   "1.00"
#property strict

#include <WinUser32.mqh>
#import "kernel32.dll"
   int _lopen  (string path, int of);
   int _lcreat (string path, int attrib);
   int _llseek (int handle, int offset, int origin);
   int _lread  (int handle, int& buffer[], int bytes);
   int _lwrite (int handle, string buffer, int bytes);
   int _lclose (int handle);
#import

#define OF_READ               0
#define OF_WRITE              1
#define OF_READWRITE          2
#define OF_SHARE_COMPAT       3
#define OF_SHARE_DENY_NONE    4
#define OF_SHARE_DENY_READ    5
#define OF_SHARE_DENY_WRITE   6
#define OF_SHARE_EXCLUSIVE    7

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
  string terminal_data_path = TerminalInfoString(TERMINAL_DATA_PATH); 
  string filename = terminal_data_path+"\\templates\\" + "1.tpl";   
//  string filename = "1.tpl";  
  
  int filehandle = _lopen(filename, OF_READ);
  if (filehandle > 0)
  {
    Print("Файл " + filename + " открыт");
    _lclose(filehandle);
  }
  else Print("Ошибка открытия файла " + filename + ". Handle = " + IntegerToString(filehandle));
}

 

 

Получаю ошибку открытия файла, filehandle = -1.

Терминал build 1310. Windows 10, 64 bit. 

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

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

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

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

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

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

Войти

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

Войти

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


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

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