Скачать MetaTrader 5

Обсуждение статьи "Как использовать торговые классы Стандартной библиотеки при написании советника"

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
183625
MetaQuotes Software Corp.  

Опубликована статья Как использовать торговые классы Стандартной библиотеки при написании советника:

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

Автор: Samuel

Dmitiry Ananiev
6753
Dmitiry Ananiev  

Очень полезная статья для меня. Все намного проще если использовать библиотеки ! 

Просьба к разработчикам: напишите класс для работы с High[i] , Low[i]. Open[i], Close [i]. Я думаю всем будет полезен этот класс! Для себя я эту проблему решил, но не уверен что правильно, т.к. тестирование занимает много времени... 

Rashid Umarov
Админ
12066
Rashid Umarov  

Посмотрите раздел Группа классов таймсерий
Dmitiry Ananiev
6753
Dmitiry Ananiev  
#include <Indicators\Series.mqh>

double High[];
 CiHigh z;

почему такой код выдает ошибку 

'1.mq5' 1.mq5 1 1

'Series.mqh' Series.mqh 1 1

'ArrayObj.mqh' ArrayObj.mqh 1 1

'Array.mqh' Array.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'ArrayDouble.mqh' ArrayDouble.mqh 1 1

'CiHigh' - declaration without type 1.mq5 12 2

1 error(s), 0 warning(s) 2 1

во всех примерах объявлять тип не надо...

 если не трудно напишете как получить

Print High[2], например.  

Quantum
174
Quantum  
dimeon:

почему такой код выдает ошибку 


во всех примерах объявлять тип не надо...

 если не трудно напишете как получить

Print High[2], например.  

в документации опечатка. Этот класс в находится в файле TimeSeries.mqh.

Пример использования (скрипт выводит три последних High текущего графика):

#include <Indicators\TimeSeries.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double High[];
   CiHigh z;
   int count=3;
   if(z.Create(_Symbol,_Period)==true)
     {
      if(z.GetData(0,count,High)==count)
        {
         for(int i=0; i<count; i++) Print(i,"=",High[i]);
        }
      else
         Print("Не удалось получить ",count," данных таймсерии.");
     }
   else Print("Ошибка создания таймсерии.");
  }
//+------------------------------------------------------------------+
Dmitiry Ananiev
6753
Dmitiry Ananiev  
Quantum:

в документации опечатка. Этот класс в находится в файле TimeSeries.mqh.

Пример использования (скрипт выводит три последних High текущего графика):

Спасибо огромное !  а то я все мозги сломал ! 
IgorM М
4801
IgorM М  

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

struct str_bars{
   datetime    time[];     // Массив-таймсерия, содержащий время открытия каждого бара текущего графика
   double      open[];     // Массив-таймсерия, содержащий цены открытия каждого бара текущего графика.
   double      close[];    // Массив-таймсерия, содержащий цены закрытия каждого бара текущего графика.
   double      high[];     // Массив-таймсерия, содержащий максимальные цены каждого бара текущего графика.
   double      low[];      // Массив-таймсерия, содержащий минимальные цены каждого бара текущего графика.
};
struct str_info{
   double   point;         // Размер пункта текущего инструмента в валюте котировки
   int      spread;        // Текущий спред
};
//____________________________________________________________________
class currency {
   public:
//---- данные      
      MqlTick TICK;        // тиковые данные
      str_bars  BAR;       // данные таймсерий
      str_info INFO;       // информация об инструменте
      int error;
//---- методы      
      int create(string sym,ENUM_TIMEFRAMES period, int numbars);
      int refresh(void);
   private:
      string            symbol;
      ENUM_TIMEFRAMES   per;
      int               num;
      datetime          lastbar_time;
      int               tmpint1,tmpint2;
      int ch_load(void);
};
//____________________________________________________________________

работаю со своим классом только в части уже готовых данных, ну и конечно класс самостоятельно получает данные путем вызова метода   refresh()

Михаил
587
Михаил  
Полезная статья!
Trolls
172
Trolls  

в статье неточность

double lot_price = myaccount.MarginCheck(_Symbol,otype,Lot); //цена лота/кол-во требуемой маржи

должно быть

   double lot_price=myaccount.MarginCheck(_Symbol,otype,Lot,price);  //--- цена лота/кол-во требуемой маржи

 

Aleksey Kadachigov
861
Aleksey Kadachigov  

Отлчная статья. Большое спасибо автору. Еще бы написать проверку уровня Stop_Level перед размещением ордера, проверку значения спреда. Дело в том, что если спред плавающий, то при больших значениях можно не входить в рынок, т.к. это не выгодго. Это поможет советнику не торговать во время новостей. Еше провеку на отклонение хочется - рассуждения аналогичные. И еще есть вопрос по библиотеке: что такое функция (что за процесс она обозначает и описывает)?

FreezeLevel

Получает дистанцию заморозки торговых операций в пунктах.

int  FreezeLevel() const

простым языком - объясните, пожалуйста, кто знает.

И еще один вопрос. Мы можем узнать ограничения, например, Stop_Level на текущий момент(пусть 10 пунктов). Выставляем отложенный ордер со значением SL=10 пунктов. Через, к примеру час цена достигает указанной в ордере цены, но Stop_Level на этот момент равен, например 15п. Что будет - сработает отложенный ордер или будет отклонен? Кроме того, когда цена достигает указанной в ордере цены, а спред изменился - значит ли это, что вход или выход возможен по худшей цене, по отношению к той предполагаемой, что была на момент открытия ордера, или ордер вообще не сработает?

Trolls
172
Trolls  

подскажите что я неправильно делаю ? почему Bid не печатается ?

Вот лог работы


2011.01.31 20:20:18 00 (EURUSD,M1) EURUSD 0

вот код

#include <Trade\SymbolInfo.mqh>  //--- Класс CSymbolInfo
CSymbolInfo    my_symbol;        //--- Объект класса CSymbolInfo
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {   return(0);  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   my_symbol.Name(_Symbol);
   my_symbol.Refresh();
   Print(_Symbol," ",my_symbol.Bid());
  }
//+------------------------------------------------------------------+



 

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий