• Уважаемый гость! Чтобы просмотреть скрытую часть информации Вам нужно зарегистрироваться.

    Быстрая регистрация!

Советник Маленький советник по хеджу позиций

  • Автор темы 010010111
  • Дата начала
010010111

010010111

Участник
Регистрация
09.09.2016
Сообщения
9
Реакции
2
Добрый день.
Очень нужен маленький советник. Я сейчас только начинаю учится программировать на MQL читаю Сергей Ковалёв программирование на алгоритмическом языке, и это будет возможно тот советник который я сам смогу дорабатывать.
Задаваемые параметры
-объем открытого ордера в лотах
-stop loss - число пунктов и take profit - число пунктов
-magic number отслеживаемого советника
Суть работы советника в слежке за другим советником с определенным magic number, как только отслеживаемый советник откроет позицию, наш советник открывает свою позицию всегда на sell с заданными параметрами. Важно чтобы советник всегда следил за тем не открылась ли позиция отслеживаемого советника, и выставить ордер в идеале почти одновременно.
Отслеживаемый советник не выставляет больше одного ордера, то есть после закрытия позиций все должно повторяться без накладок magic number, что упрощает задачу.
 
  • Панель управления
  • #2
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 166
Реакции
513
Добрый день.
Очень нужен маленький советник. Я сейчас только начинаю учится программировать на MQL читаю Сергей Ковалёв программирование на алгоритмическом языке, и это будет возможно тот советник который я сам смогу дорабатывать.
Задаваемые параметры
-объем открытого ордера в лотах
-stop loss - число пунктов и take profit - число пунктов
-magic number отслеживаемого советника
Суть работы советника в слежке за другим советником с определенным magic number, как только отслеживаемый советник откроет позицию, наш советник открывает свою позицию всегда на sell с заданными параметрами. Важно чтобы советник всегда следил за тем не открылась ли позиция отслеживаемого советника, и выставить ордер в идеале почти одновременно.
Отслеживаемый советник не выставляет больше одного ордера, то есть после закрытия позиций все должно повторяться без накладок magic number, что упрощает задачу.
Вы можете писать советник а я буду помогать, сложного ничего нет
Или Вы хотите что бы я написал советник. ??
 
010010111

010010111

Участник
Регистрация
09.09.2016
Сообщения
9
Реакции
2
Я так понимаю что мне нужно написать какой то цыкл проверяющий два условия есть ли на рынке открытая позиция и если есть то открыта ли позиция моего советника и если не открыта то выполнить тело цыкла. Но возможно я и не правильно понимаю как мне постоянно мониторить рынок на предмет открытой позиции.
 
010010111

010010111

Участник
Регистрация
09.09.2016
Сообщения
9
Реакции
2
Именно это место мне не понятно.
 
  • Панель управления
  • #6
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 166
Реакции
513
Именно это место мне не понятно.
Код:
//+------------------------------------------------------------------+
//|                                                      test222.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
input string sumbA = "EURUSD"; //Symbol A
input string sumbB = "GBPUSD"; //Symbol B
input int    Magic=227;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

// На каждом тике проверяем наличие ордеров

   int sumb_a_b=0,sumb_a_s=0,sumb_b_b=0,sumb_b_s=0; // Обнулим переменные

   for(int i=OrdersTotal()-1;i>=0;i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderMagicNumber()==Magic) // Если наш Меджик
           {

            if(OrderSymbol()==sumbA) // Проверяем есть ли ордера по главному символу
              {
               if(OrderType()==OP_BUY)  sumb_a_b++; // Считаем баи
               if(OrderType()==OP_SELL) sumb_a_s++; // Считаем селы
              }

            if(OrderSymbol()==sumbB) // Проверяем наличие ордеров по хеджирующему символу
              {
               if(OrderType()==OP_BUY)  sumb_b_b++; // Считаем баи
               if(OrderType()==OP_SELL) sumb_b_s++; // Считаем селы
              }

           }

// Теперь открываем ордера
   if(sumb_a_b>0 && sumb_b_b==0) // Если по главному символу есть ордер а по хеджу ордера нет
     {
      // Откроем хедж ордер
      int tik=OrderSend(
                        sumbB,// Указываем символ
                        OP_BUY,//Тип
                        0.01,  // лот
                        SymbolInfoDouble(sumbB,SYMBOL_ASK) // и делаем запрос цены с хеджирующей пары
                        ,30,// Проскальзы
                        0, // Стоп лосс
                        0, // тейк профит
                        "",// комментарий
                        Magic,//Маг номер
                        0,// экспирация
                        clrNONE // цвет
                        );
     }
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
 
010010111

010010111

Участник
Регистрация
09.09.2016
Сообщения
9
Реакции
2
Спасибо теперь я представляю как это будет работать. Сейчас буду писать :).
 
010010111

010010111

Участник
Регистрация
09.09.2016
Сообщения
9
Реакции
2
Добрый вечер. Написал что то, но оно пока не работает o_O. Пишет ошибку в строке 23 'if' - open parenthesis expected. Пока в сети не нахожу что это значит. И еще не совсем уверен в правильности реализации фрагмента кода с 45 по 51 строке. Задумано было перебрать все открытые ордера и если не один из них не соответствует критерию с заданным мейджиком то flag=0. У меня сомнения не проверил ли он у первого попавшегося несовпадения по мейджику, и не перебрав остальные присвоит flag=0 ????

Код:
//+------------------------------------------------------------------+
//|  hadg.mq4 |
//|  Copyright 2016, MetaQuotes Software Corp. |
//|  Форекс онлайн |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link  "Форекс онлайн"
#property version  "1.00"
#property strict
extern double lot = 0.01;
extern int hedgpf = 100;
extern int hedgls = 100;
extern int maghedg = 12345; // мейджик хеджируемого советника
int magic = 172453;
int flag=0;
double price;
int ticket = 0;
//+------------------------------------------------------------------+
//| Expert tick function  |
//+------------------------------------------------------------------+
void OnTick()
  {
if flag=0

for(int i=OrdersTotal()-1;i>=0;i--)
  if(OrderSelect(i,SELECT_BY_POS))
  if(OrderMagicNumber()==maghedg) // Если наш Меджик

{
flag=1;
//+++++++++++++++++++++++++++++++++++++++++++++++++ открытие ордера
//--- получим минимальное значение Stop level
  price=Ask;
// Выставляем ордер на продажу
//--- размещаем рыночный ордер на продажу
  ticket=OrderSend(Symbol(),OP_SELL,lot,price,3,hedgls,hedgpf," Hedg ",magic,0,clrGreen);
  if(ticket1<0)
  {
  Print("OrderSend завершилась с ошибкой #",GetLastError());
  }
  else
  {Print("Функция OrderSend успешно выполнена");
}
//--- 
}
  for(int i=OrdersTotal()-1;i>=0;i--)
  if(OrderSelect(i,SELECT_BY_POS))
  if(OrderMagicNumber()!=maghedg) // Если не наш Меджик
{
flag=0
}
  }
//+------------------------------------------------------------------+
 
Последнее редактирование модератором:
  • Панель управления
  • #9
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 166
Реакции
513
Добрый вечер. Написал что то, но оно пока не работает o_O. Пишет ошибку в строке 23 'if' - open parenthesis expected. Пока в сети не нахожу что это значит. И еще не совсем уверен в правильности реализации фрагмента кода с 45 по 51 строке. Задумано было перебрать все открытые ордера и если не один из них не соответствует критерию с заданным мейджиком то flag=0. У меня сомнения не проверил ли он у первого попавшегося несовпадения по мейджику, и не перебрав остальные присвоит flag=0 ????



//+------------------------------------------------------------------+
//| hadg.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//|

Please Login or Register to view hidden text.

|
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "

Please Login or Register to view hidden text.

"
#property version "1.00"
#property strict
extern double lot = 0.01;
extern int hedgpf = 100;
extern int hedgls = 100;
extern int maghedg = 12345; // мейджик хеджируемого советника
int magic = 172453;
int flag=0;
double price;
int ticket = 0;
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if flag=0

for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==maghedg) // Если наш Меджик

{
flag=1;
//+++++++++++++++++++++++++++++++++++++++++++++++++ открытие ордера
//--- получим минимальное значение Stop level
price=Ask;
// Выставляем ордер на продажу
//--- размещаем рыночный ордер на продажу
ticket=OrderSend(Symbol(),OP_SELL,lot,price,3,hedgls,hedgpf," Hedg ",magic,0,clrGreen);
if(ticket1<0)
{
Print("OrderSend завершилась с ошибкой #",GetLastError());
}
else
{Print("Функция OrderSend успешно выполнена");
}
//---
}
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()!=maghedg) // Если не наш Меджик
{
flag=0
}
}
//+------------------------------------------------------------------+
Я Вам скинул готовый код с комментариями, чем он Вам не нравиться, что не понятно ?
 
Теги советник по хеджу позиций
Верх