Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 903

 
Vladimir Pavlov:

Тупо сделал скрипт для копирования внутри компа....     Не копирует!!!

Ну и где описание ошибки? Какая операционка? Какой билд MetaTrader 5?

Права на запись в папку есть?


Добавлено: похоже если нет директории, её сначала нужно создать.


Когда копирование идёт в существующую директорию - никаких проблем. MetaTrader 5 отрабатывает без ошибок.

 

Как гарантированно узнать, что позиция с заданным id закрылась?

Очевидное решение - когда PositionSelectByTicket возвращает false, но это наверное может произойти и в ситуации, когда открытые позиции не успели загрузиться в терминал при подключении к торговому счету?

Чуть более усложненное решение - PositionSelectByTicket возвращает false и HistorySelectByPosition возвращает true. В этом случае если история для данной позиции загружена, то и список открытых позиций должен успеть загрузиться.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
. ... Rick D. ... .:

Подождите, пока Терминал синхронизируется. Например, while (HistorySelect).

 
fxsaber:

Подождите, пока Терминал синхронизируется. Например, while (HistorySelect).

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

 
. ... Rick D. ... .:

Я не знаток внутренних тонкостей работы терминала.

Так же далеко не знаток. Просто в голову приходят сразу несколько вариантов на пробу. А что сработает - надо ставить эксперимент.

 
Vladimir Karputov:

Самое простое решение: открываете в MetaTrader график нужного финансового инструмента и вешаете на этот график советник.

Это  известно.  А  вот  в  самой  программе  интересно  как  пару  для  работы  назначить ?  Есть  ли  функция  для  этого ?   
 
cepreu1:
Это  известно.  А  вот  в  самой  программе  интересно  как  пару  для  работы  назначить ?  Есть  ли  функция  для  этого ?   

Запросто.

Например торговые операции. Смотрим торговый класс CTrade, метод Buy:

bool  Buy( 
   double        volume,          // объем позиции 
   const string  symbol=NULL,     // символ 
   double        price=0.0,       // цена исполнения 
   double        sl=0.0,          // цена Stop Loss 
   double        tp=0.0,          // цена Take Profit 
   const string  comment=""       // комментарий 
   )

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


Или например получение данных о ценах открытия, закрытия ... - CopyRates:

int  CopyRates( 
   string           symbol_name,       // имя символа 
   ENUM_TIMEFRAMES  timeframe,         // период 
   int              start_pos,         // откуда начнем  
   int              count,             // сколько копируем 
   MqlRates         rates_array[]      // массив, куда будут скопированы данные 
   );
 
Vladimir Karputov:

Запросто.

Например торговые операции. Смотрим торговый класс CTrade, метод Buy:

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


Или например получение данных о ценах открытия, закрытия ... - CopyRates:

Да,  хорошо.  Но  я  не  уточнил,  что  назначить  пару  хочу  при  запуске,  но  

не  открывая  позицию.  А  Buy  делает это  через  открытие  позиции,

а  CopyRates  даёт  исторические данные  пары  не  назначая  её. 

 
cepreu1:

Да,  хорошо.  Но  я  не  уточнил,  что  назначить  пару  хочу  при  запуске,  но  

не  открывая  позицию.  А  Buy  делает это  через  открытие  позиции,

а  CopyRates  даёт  исторические данные  пары  не  назначая  её. 

Вы как-то витиевато излагаете, но попробую угадать: Вам нужен входной параметр с названием символа? Тогда вот код - задаёте в параметре "InpSymbol" нужный символ. Этот символ проверяется в OnInit() - если такого символа нет, тогда советник выгрузится, а во вкладке "Эксперты" терминала (или во вкладке "Журнал" тестера) появится сообщение об ошибке.

//+------------------------------------------------------------------+
//|                                                   Set Symbol.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
//---
#include <Trade\SymbolInfo.mqh>  
CSymbolInfo    m_symbol;                     // symbol info object
//--- input parameters
input string   InpSymbol="ASDWER";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(InpSymbol)) // sets symbol name
      return(INIT_FAILED);
   RefreshRates();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;
   string text=m_symbol.Name()+"\n"+
               "Ask "+DoubleToString(m_symbol.Ask(),m_symbol.Digits())+"\n"+
               "Bid "+DoubleToString(m_symbol.Bid(),m_symbol.Digits());
   Comment(text);

  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

Если символ указанный в параметре "InpSymbol" существует, тогда на график будет выводится информация

  • Название символа
  • Цена Ask
  • Цена Bid


Вот как это работает: запускаем на EURUSD, а в настройках указываем символ USDJPY. Получается, что советник работает на символе EURUSD, но информацию (цены) получает с символа USDJPY


Файлы:
 
Vladimir Karputov:

Вы как-то витиевато излагаете, но попробую угадать: Вам нужен входной параметр с названием символа? Тогда вот код - задаёте в параметре "InpSymbol" нужный символ. Этот символ проверяется в OnInit() - если такого символа нет, тогда советник выгрузится, а во вкладке "Эксперты" терминала (или во вкладке "Журнал" тестера) появится сообщение об ошибке.

Если символ указанный в параметре "InpSymbol" существует, тогда на график будет выводится информация

  • Название символа
  • Цена Ask
  • Цена Bid


Вот как это работает: запускаем на EURUSD, а в настройках указываем символ USDJPY. Получается, что советник работает на символе EURUSD, но информацию (цены) получает с символа US

Vladimir Karputov:

Вы как-то витиевато излагаете, но попробую угадать: Вам нужен входной параметр с названием символа? Тогда вот код - задаёте в параметре "InpSymbol" нужный символ. Этот символ проверяется в OnInit() - если такого символа нет, тогда советник выгрузится, а во вкладке "Эксперты" терминала (или во вкладке "Журнал" тестера) появится сообщение об ошибке.

Если символ указанный в параметре "InpSymbol" существует, тогда на график будет выводится информация

  • Название символа
  • Цена Ask
  • Цена Bid


Вот как это работает: запускаем на EURUSD, а в настройках указываем символ USDJPY. Получается, что советник работает на символе EURUSD, но информацию (цены) получает с символа USDJPY


Да,  но  если  брать  данный  пример,  то  ведь  эксперт  запускаем  на  EURUSD, но  информацию (цены) получаем с символа USDJPY.

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

 нужной  паре )  и  все,  наблюдаем  за  этой  парой,  и  потом  если  надо  открываем  позицию.    

Причина обращения: