[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 378

 
Скажите можно как нибудь узнать размер комиссий для ордера в 1 лот, не открывая ордера?
 
Reshetov:

OrdersTotal() выдает количество уже открытых позиций, т.е. с ее помощью можно проверить, есть уже открытая позиция или еще нет.

Я использую функцию Terminal() из учебника при закрытии позиций, при условии, что Mas_Ord_New[0][0]!=0. Но здесь стоит другая задача: нужно сделать флаг, запрещающий торговать по текущему сигналу, если один ордер по нему уже открыт. Пытаюсь использовать флаги, но в чем-то я ошибся.

  
static bool buy_1=true;
   
if(Stoch_Sig==4 && buy_l==true)
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_l=false; // снимем флаг, запрещаем торговать по данному сигналу
       }


   
if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг, сигнал сменился - торговать по нему можно опять
       buy_l=true;
 

ПАрни нужна помощь Что это такое

2012.09.10 18:40:20 '6257743': order buy 5.00 EURUSD opening at 1.27816 sl: 1.27791 tp: 1.27876 failed [Invalid S/L or T/P]

И еще почему цена и стоп лос одинаковы:

Цена 1.25618 Стоп Лосс 1.25618 Тейк профит 1.25698


Тейк профит 60 пунктов

Стоп лосс 20

 

Здравствуйте. У меня вопрос про пользовательские индикаторы. В описании iCustom сказано:

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Расчет указанного пользовательского индикатора. Пользовательский индикатор должен быть скомпилирован (файл с расширением EX4) и находиться в директории каталог_терминала\experts\indicators.
symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
name - Имя пользовательского индикатора.
... - Список параметров (при необходимости). Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора.
mode - Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer.
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

Вопрос: как получить значение "shift"? (при вызове индикатора со сдвигом он использует значения как без него, т.е к примеру у меня получается, что iCustom(NULL, 0, "name",pam1,0,1)= iCustom(NULL, 0, "name",pam1,0,100), хотя если вызвать индикатор 100 баров назад у него будет значение отличное от iCustom(NULL, 0, "name",pam1,0,100). Индикатор прост, использует 5 предыдущих значений Close, берет их среднее.

Буду благодарен за Вашу помощь.

 
paladin80:
Отклонение от основной линии вы поставили 0 (ноль). Надо больше ноля.
Reshetov:
Вы бы девиацию еще отрицательной задали?


Спасибо, камрады! Именно так! Заработался и не доглядел. Жаль, нет возможности просто пасибку нажать, чтобы не плодить. )

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

 

Добрый вечер всем!

хотел все по тому же вопросу спросить взял функцию вот отсюда https://www.mql5.com/ru/forum/131859

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}

выдает ошибки--->

Ведь все переменные в функции обьявленны внутри неё...что не так?

скопировал её,вставил. --->

   if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
   
   
 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 
DanLett:

Нет там ошибок:

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
  
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), CLR_NONE);
          }
        }
      }
    }
  }
}
Но, только нужно цвет указать, например - CLR_NONE.
 

А это похоже у вас в "воздухе висит":

  if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
И вообще, чтобы выполнилось такое условие (High[2]==High[1]) или такое (Close[2]==High[1]) или такое (High[2]==Open[1]) - это редкость. Посмотрите на график, много вы найдёте таких совпадений?

С точки зрения логики удаления ордера, ... - тоже страдает, короче.

 

скопировал отсюда код и создал новый проект(советник) вставил код -> скомпилировал

Странно, но все равно выдает те же ошибки...

 
DanLett:

скопировал отсюда код и создал новый проект (советник) вставил код -> скомпилировал

Странно, но все равно выдает те же ошибки...

Попробуйте всё удалить, кроме этой функции и откомпилировать. Будут ошибки? Только сохраните, прежде, чем удалять.