Полезные функции от KimIV - страница 23

 

Функция NumberOfBarCloseLastPos().

Эта функция возвращает номер бара закрытия последней позиции или -1. Отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - NULL означает текущий рыночный инструмент.
  • tf - Таймфрейм. Значение по умолчанию - 0 означает текущий таймфрейм.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара закрытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
ЗЫ. Во вложении скрипт для тестирования функции NumberOfBarCloseLastPos().
 
 
 
KimIV:

Функция DeleteOrders(). Версия для тестера.

Функция DeleteOrders() предназначена для удаления отложенных ордеров BuyLimit, BuyStop, SellLimit и SellStop. op - Тип торговой операции, тип отложенного ордера. Возможны одно из пяти значений: -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT или OP_SELLSTOP. Значение по умолчанию -1 - означает любой ордер.
mn
- MagicNumber, идентификационный номер отложенного ордера. Значение по умолчанию -1 - означает любой магик.

Здравствуйте. На 10 страничке эта функция выставлена для применения.

Применила в своем эксперте для удаления отложек. Вернее хотела применить. Расположила функцию вне раздела int start

И вставила

if (isCloseLastPosByTake(NULL,OP_BUY, My order Buy ))   {
              DeleteOrders(NULL, -1,  My order Sell);   }

Но при компиллировании выходит ошибка

'clDelete' - variable not defined C:\Program Files\MetaTrader - Alpari\experts\0005.mq4 (1155, 40)

Как мне ошибку устранить? что это такое - clDelete

А когда я применяю функцию ClosePositions() -Закрытие позиций по рыночной цене, то всё нормально - без всяких ошиб0к!

/ даже просто если вставить функцию DeleteOrders и пока не применять - всё равно ошибка эта компиллируется!

 
Rita писал (а):
Но при компиллировании выходит ошибка
'clDelete' - variable not defined C:\Program Files\MetaTrader - Alpari\experts\0005.mq4 (1155, 40)
Как мне ошибку устранить? что это такое - clDelete

Там же, на 10 странице во вложении есть файл test_DeleteOrders.mq4

Скачайте его и поищите в нём все упоминания clDelete.

 

Скачала, посмотрела! Так что? Выходит всего то и надо было просто задать цвет значка закрытия!

Но теперь опять не всё в порядке. Теперь той ошибки уже нет. НО появилась другая - уже на фунцкии ClosePositions(), ошибка - которой ранее не было.

if (L_2Sell==true)                 {  
        ClosePositions(NULL, -1,Magic);
                                      }

'ClosePosBySelect' - function is not defined C:\Program Files\MetaTrader - Alpari\experts\0005.mq4 (905, 47)
И скрипта там рядом (стр. 14) нет, чтобы посмотреть

Скажите, как устранить ошибку?

 
Rita писал (а):
'ClosePosBySelect' - function is not defined C:\Program Files\MetaTrader - Alpari\experts\0005.mq4 (905, 47)

Эта ошибка означает, что не определена функция ClosePosBySelect().

Rita писал (а):
Скажите, как устранить ошибку?
Нужно найти код функции ClosePosBySelect() и вставить его в файл Вашего эксперта. Посмотрите на странице 13.
 

Извините, что ещё раз побеспокою! Поставила рядышком с ClosePositions(), указанную вами функцию ClosePosBySelect() и после компеллирования появились уже шесть ошибок! Ну прям зла не хватает!

С четырмя я справилась сама. Проскальзывание, цвет, число попыток закрытия....Остались две ошибки, -

звуковые файлы -

'UseSound' - variable not defined C:\Program Files\MetaTrader - Alpari\experts\0005.mq4 (1002, 13)

'NameFileSound' - variable not defined C:\Program Files\MetaTrader - Alpari\experts\0005.mq4 (1002, 33)

Откуда их брать? Куда ставить?

Ну extern bool UseSound = false;//Выключатель

я поставлю в СВОЙСТВА ЭКСПЕРТА, а NameFileSound' - это что? и где брать?

**************************************************************************

Нашла и поставила в глобальные

extern bool UseSound = false;//выключатель звука
extern string NameFileSound="alert.wav";

И тут ещё вместо одной ошибки компилятор вывалил 4 штуки:

'GetNameOP' - function is not defined

'ErrorDescription' - function is not defined

'else' - unexpected token

'GetNameOP' - function is not defined

Похоже так и будут эти ошибки бесконечно вылезать. Чтобы использовать одну функцию ClosePositions(), пришлось сначала поставить другую - ClosePosBySelect(). А другая в свою очередь требует каких то звуков - бубенчиков. А когда я нахожу с большим трудом эти совершенно ненужные мне звуки-бубенчики, то вылезает совсем уж непонятная ошиба -'else' - unexpected token и др. ошибки. А я ещё даже не начала использовать эту функцию. Только лишь поставила в числе прочих.!

Подскажите, как мне исправить ошибки? Закомментировала все эти GetNameOP. Вроде ушли ошибки. Но будет ли без них функция работать хорошо?

 
Rita писал (а):
И тут ещё вместо одной ошибки компилятор вывалил 4 штуки:
'GetNameOP' - function is not defined

На первой странице во вложении testrSetOrder.mq4

Rita писал (а):
ErrorDescription' - function is not defined

В коде своего эксперта вставьте строку

#include <stdlib.mqh>

Rita писал (а):
'else' - unexpected token
Когда сделаете то, что описано выше, эта ошибка исчезнет сама.
 

Функция NumberOfBarOpenLastPos().

Эта функция возвращает номер бара открытия последней позиции или -1. Отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - NULL означает текущий рыночный инструмент.
  • tf - Таймфрейм. Значение по умолчанию - 0 означает текущий таймфрейм.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(iBarShift(sy, tf, t, True));
}
ЗЫ. Во вложении скрипт для тестирования функции NumberOfBarOpenLastPos().
Файлы: