stepanyan77
Artur Stepanyan

 
Уровень 5


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Торговый робот парный трейдинг для mt5

Здравствуйте мне нужно торговый робот для парного трейдинга для терминала mt5 тост робот должен покупать один инструмент и продавать второй инструмент одновременно при расхождение индикатора закрывать сделки при схождение индикатора
  • 0
  • Просмотров: 4505
  • 31 марта 2022, 15:50
  • stepanyan77
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Заказ советника на базе индикатора TrendWave
Следующая запись в группе  
Торговый робот парный трейдинг для mt5
30 марта 2022
31 марта 2022

Брокер для ваших роботов, 15 лет на рынке

Комментарии (107)

+
0
приложите индикатор
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 31 марта 2022, 17:55
+
0
Можно написать индикатор и по етомоу индикатору патом советник логика такая индикатор должен на нижнем части графика показать линии две инструмента но не переписывать а чистый график два линии один первый инструмент а другой второй инструмент
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 31 марта 2022, 18:53
+
0
пишите тз на индикатор
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 31 марта 2022, 19:35
+
0
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 1 апреля 2022, 07:57
+
0


Пример скриншота в ниже показан индикатор белая ето график линии EURUSD синий его график линейный GBPUSD.Индикатор должен показать две отдельные линейный графики инструментов на нижнем части графика как на рисунке индикатор не должен перерисоват
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 1 апреля 2022, 08:11
+
0
по какой формуле у вас определяется корреляция? можно сразу без индикатора ввести формулу в советник
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 1 апреля 2022, 17:25
+
0
сделал набросок для индикатора корреляции, но нужна более точная формула:



www.opentraders.ru/downloads/3287/
Редактирован: 1 апреля 2022, 20:43
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 1 апреля 2022, 20:23
+
0
Больше вам спасибо завтра буду посмотреть
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 1 апреля 2022, 23:41
+
0
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 10:29
+
0


У меня показывает что не так
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 10:41
+
0


У меня показывает что не так на GBPUSD
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 11:24
+
0
этот параметр вручную надо подбирать:


input double Delta=0.17;


по умолчанию стоит для EURUSD && USDCHF

для евро и фунта -0.22

avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 2 апреля 2022, 12:32
+
0
это уже простой советник на данном индикаторе: www.opentraders.ru/downloads/3288/



avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 2 апреля 2022, 13:26
+
0
Посмотрите эту часть кода

  if(PositionsTotal()<1)
     {
      if(s1[0]<s2[0])
        {
         trade.Buy(Lot,_Symbol,Ask1,0,0,"");
         trade.Sell(Lot,Symb,Bid1,0,0,"");
        }

      if(s1[0]>s2[0])
        {
         trade.Buy(Lot,Symb,Ask1,0,0,"");
         trade.Sell(Lot,_Symbol,Bid1,0,0,"");
        }
     }
avatar

  16  ssg Сообщений: 817

  • 2 апреля 2022, 16:25
+
0
Спасибо большое Андрей можно в настройках советника добавить настройки чтобы расхождение две пари некоторое ростаяне советник открыл сделку продавал ту пару который с верху и покупал ту пару который находится в низу индикатора Coral и закривал обе позиции при схождение двух пар по индикатору Coral вот скриншот
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 15:33
+
0
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 15:34
+
0
сейчас есть закрытие по профиту лосю и пересечению. все эти моменты отключаемые.



www.opentraders.ru/downloads/3288/
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 2 апреля 2022, 16:26
+
0
Можно в главном окне советника добавить настройки расхождение по индикатору. Если честно я не понял как рассчитывать ростаяние расхождение двух инструментов чтобы советник открыл сделки именно по етим настройком
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 16:45
+
0

input double Sigma = 1111;

если разница между инструментами >1111 то открываем позы
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 2 апреля 2022, 16:59
+
0
Андрей, добрый вечер. В советнике у обоих пар одни и те же аск и бид.

 double Ask1=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Ask2=SymbolInfoDouble(Symb,SYMBOL_ASK);

   double Bid1=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   double Bid2=SymbolInfoDouble(Symb,SYMBOL_BID);

   double sigma=MathAbs(s1[0]-s2[0])/_Point;

   CopyBuffer(ind,0,0,1,s1);
   CopyBuffer(ind,1,0,1,s2);

   if(PositionsTotal()<1 && sigma>Sigma)
     {
      if(s1[0]<s2[0])
        {
         trade.Buy(Lot,_Symbol,Ask1,0,0,"");
         trade.Sell(Lot,Symb,Bid1,0,0,"");
        }

      if(s1[0]>s2[0])
        {
         trade.Buy(Lot,Symb,Ask1,0,0,"");
         trade.Sell(Lot,_Symbol,Bid1,0,0,"");
        }
     }
avatar

  16  ssg Сообщений: 817

  • 2 апреля 2022, 17:51
+
0
Спасибо получилос но саветник закрывает позиции только по профыту можно добавить чтобы советник закривал позиции на схождение индикатора Coral
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 19:01
+
0
В советнике у обоих пар одни и те же аск и бид.


поправил:


   double Ask1=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid1=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   
   double Ask2=SymbolInfoDouble(Symb,SYMBOL_ASK);
   double Bid2=SymbolInfoDouble(Symb,SYMBOL_BID);   
     
   double sigma=MathAbs(s1[0]-s2[0])/_Point;

   CopyBuffer(ind,0,0,1,s1);
   CopyBuffer(ind,1,0,1,s2);

   if(PositionsTotal()<1 && sigma>Sigma)
     {
      if(s1[0]<s2[0])
        {
         trade.Buy(Lot,_Symbol,Ask1,0,0,"");
         trade.Sell(Lot,Symb,Bid2,0,0,"");
        }

      if(s1[0]>s2[0])
        {
         trade.Sell(Lot,_Symbol,Bid1,0,0,"");
         trade.Buy(Lot,Symb,Ask2,0,0,"");
        }
     }
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 2 апреля 2022, 19:49
+
0
может не на форексе попытаться с этим что то сделать? *think* 

avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 2 апреля 2022, 20:03
+
0
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 21:13
+
0
Я торгую Foreign, Mmvb, USA market.Уважаемый Андрей в настройках я поставил профит 0 штобы советник закрыл сделки при пересечения индикатора но уви не так закрывает сделки можно поправить чтобы две сделки закрылись при пересечение индикатора
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 21:19
+
0
у меня закрывает:



avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 2 апреля 2022, 22:33
+
0
Можете загрузить объявлений советник может я что-то не сделал так
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 22:44
+
0
У вас в настройках видно ест строка Close Cross= true у меня такой функции нету
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 2 апреля 2022, 22:47
+
0
только что скачал с базы советник. есть такая функция, только она отключена по умолчанию
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 2 апреля 2022, 23:00
+
0
Я понимаю что индикатор самый простой и написан для проверки в советнике.
Но стартовая разница

input double Delta=0.17;


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


Delta = Ma(s1)-Ma(s2);

или вообще считать по другому (например):

Delta = ((Close(s1)-Ma(s1))-(Close(s2)-Ma(s2)));
avatar

  16  ssg Сообщений: 817

  • 3 апреля 2022, 08:55
+
0
поэтому я сразу просил тз на индикатор :) 
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 3 апреля 2022, 11:25
+
0
Я не разбираюсь в программирования но знаю одно все зависит от индикатора чем точнее будет работать индикатор тем прибыльно будет работать советник. Просьба вы можете исправить индикатор если есть ошибки
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 3 апреля 2022, 09:42
+
0
Я не говорил что есть ошибки. Я лишь высказал свое видение. У Вас на скрине от 31 марта есть уже индикатор по которому Вы торгуете. Андрей у Вас спрашивал формулы расчета индикатора. Если Вас устраивает Ваш индикатор и результаты торговли по нему тогда дайте код индикатора Андрею и попросите использовать его в советнике.
avatar

  16  ssg Сообщений: 817

  • 3 апреля 2022, 11:04
+
0
Спасибо большое Андрейю всё сделал правильно все работает точно как я просил
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 3 апреля 2022, 12:25
+
0
Только я не знаю какие настройки делти вибрат для остальных инструменты например MSFT И FB
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 3 апреля 2022, 13:01
+
0
85 разница на сегодня



avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 3 апреля 2022, 14:09
+
0
У Вас есть тестер стратегий.Тестируйте.:) 
avatar

  16  ssg Сообщений: 817

  • 3 апреля 2022, 14:05
+
0
Андрей я прошу в советник добавить Magic Number если вам не трудно
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 4 апреля 2022, 07:54
+
0
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 4 апреля 2022, 21:19
+
0
Спасибо большое Андрей
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 5 апреля 2022, 15:54
комментарий был удален 2022-04-08 13:41:55 stepanyan77

+
0
Почему сделки не закрывается по профит в валюте даже включил закрытые по пересечение тоже самое
Редактирован: 8 апреля 2022, 13:42
avatar

  9  Najj Сообщений: 104

  • 8 апреля 2022, 12:45
+
0
Не понял
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 8 апреля 2022, 13:40
+
0
Скинь пожалуйста рабочий советник у меня что то не закрывает сделки вообще
avatar

  9  Najj Сообщений: 104

  • 8 апреля 2022, 13:45
+
0
Уважаемый Андрей советник открывает только о по одному magic-у тост на второй график поставить другие пари и сменить магик советник не открывает ордер тост на первый график поставляем на EURUSD-GBPUSD MUGIC 123 НА второй график поставляем MSFT-FB меняем магик 1234 советник открывает только одну сделку по EURUSD-GBPUSD прошу проверить и исправить
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 8 апреля 2022, 13:41
+
0
Не закрывает ни по профыту не пересечения надо исправить магик набер я попросил Андрейя исправить ждите
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 8 апреля 2022, 13:46
+
0
Ище такая проблема когда начинаешь тестит сразу открывает сделку хотя нету пересечения линии
avatar

  9  Najj Сообщений: 104

  • 8 апреля 2022, 13:54
+
0
Да всё верно будем ждать когда Андрей всё исправить проблема в магии наборе
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 8 апреля 2022, 14:00
+
0
еще немного доработал :)  www.opentraders.ru/downloads/3288/



добавлена функция контроля позиций:


int CountTrades()
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            if(PositionGetInteger(POSITION_TYPE)<2)
               count++;
           }
        }
     }
   return(count);
  }


и закрытие по пересечению:


(s1[0]>s2[0] && s1[1]<s2[1] && CloseCross) || (s1[0]<s2[0] && s1[1]>s2[1] && CloseCross)
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 8 апреля 2022, 19:43
+
0
Андрей, а можете добавить коэффициент соответствия текущий, к примеру на каждом тике цена GBPUSD вычитается с EURUSD, и получается коэффициент соответствия. Так как на истории он очень сильно меняется, а так будет всегда подстраиваться под реалии. Спасибо!
avatar

  5  iluamoney Сообщений: 78

  • 9 апреля 2022, 13:14
+
0
Или подскажите как это сделать. Спасибо!
avatar

  5  iluamoney Сообщений: 78

  • 9 апреля 2022, 13:32
+
0
Выше я предлагал простые варианты расчета «коэф. соответствия».
avatar

  16  ssg Сообщений: 817

  • 9 апреля 2022, 14:01
+
0
Сможете пожалуйста добавить меняющуюся дельту из GBPUSD вычитать EURUSD. Просто в программировании не силен. Спасибо большое!
avatar

  5  iluamoney Сообщений: 78

  • 9 апреля 2022, 17:13
+
0
И прикрепить индикатор и советник.
avatar

  5  iluamoney Сообщений: 78

  • 9 апреля 2022, 17:13
+
0
Попробуйте этот вариант.Правда не уверен.
Обратите внимание какая дельта выводится в левом углу экрана.


//+------------------------------------------------------------------+
//|                                                  Corel2 v.01.mq5 |
//|                                              Copyright 2022, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>             // Подключаем торговый класс CTrade
CTrade trade;

//--- входные параметры
input string   Symb       = "USDCHF";  // 2-й символ

input double   Lot        = 1;         // Лот

input int      Loss       = 0;         // Лось в валюте
input int      Profit     = 50;        // Профит в валюте

//input double   Delta      = 0.33;      // Кэф оответствия графиков
input double   Sigma      = 333;       // Расхождение пар
input bool     CloseCross = 1;         // Закрытие по пересечению

input int      Slip       = 0;         // Проскальзывание
input ulong    Magic      = 123;       // Магик

input string IndName      = "Coral";
input int Periods=17;  // Period for MA indicator

int ind=0;
double s1[2],s2[2];


int handle1;
int handle2;
double SmoothedBuffer1[];
double SmoothedBuffer2[];
double Delta;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

//---- Create handle for 2 MA indicators
   handle1=iMA(Symbol(),PERIOD_CURRENT,Periods,0,MODE_EMA,PRICE_CLOSE);
   handle2=iMA(Symb,PERIOD_CURRENT,Periods,0,MODE_EMA,PRICE_CLOSE);
   
//---- Copy latest MA indicator values into a buffer
   double copied1=CopyBuffer(handle1,0,0,4,SmoothedBuffer1);
   double copied2=CopyBuffer(handle2,0,0,4,SmoothedBuffer2);
   Delta = (copied1-copied2);
//---
   ind=iCustom(NULL,0,IndName,Symb,Delta);
   trade.SetExpertMagicNumber(Magic);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|  Position Profit                                                 |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double p=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            p+=PositionGetDouble(POSITION_PROFIT);
           }
        }
     }
   return(p);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            if(PositionGetInteger(POSITION_TYPE)<2)
              {
               trade.PositionClose(PositionGetTicket(i));
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            if(PositionGetInteger(POSITION_TYPE)<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double Ask1=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid1=SymbolInfoDouble(_Symbol,SYMBOL_BID);

   double Ask2=SymbolInfoDouble(Symb,SYMBOL_ASK);
   double Bid2=SymbolInfoDouble(Symb,SYMBOL_BID);

   double sigma=MathAbs(s1[0]-s2[0])/_Point;

   CopyBuffer(ind,0,0,2,s1);
   CopyBuffer(ind,1,0,2,s2);

   if(CountTrades()<1 && sigma>Sigma)
     {
      if(s1[0]<s2[0])
        {
         trade.Buy(Lot,_Symbol,Ask1,0,0,"");
         trade.Sell(Lot,Symb,Bid2,0,0,"");
        }

      if(s1[0]>s2[0])
        {
         trade.Sell(Lot,_Symbol,Bid1,0,0,"");
         trade.Buy(Lot,Symb,Ask2,0,0,"");
        }
     }

   if((AllProfit()>Profit && Profit>0) || (AllProfit()<-Loss && Loss>0) || (s1[0]>s2[0] && s1[1]<s2[1]&& CloseCross) || (s1[0]<s2[0] && s1[1]>s2[1] && CloseCross))
      CloseAll();

   Comment("\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit(),
           "\n Sigma: ",sigma,
           "\n Symbol1: ",s1[0],
           "\n Symbol2: ",s2[0],
           "\n Delta: ",Delta );
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

avatar

  16  ssg Сообщений: 817

  • 9 апреля 2022, 18:21
+
0
Тут с MA, а можно просто сделать вычитание цены GBPUSD из EURUSD. Это и будет дельта. К примеру GBPUSD 1.4500, а EURUSD 1.1500, дельта будет 0.3
avatar

  5  iluamoney Сообщений: 78

  • 9 апреля 2022, 22:32
+
0
Поставьте период ма=1 тогда будет текущая цена.
В тестере протестируйте с разным периодом МА и выложите пожалуйста здесь итоги и лучший результат. Поможете наверное многим здесь.
avatar

  16  ssg Сообщений: 817

  • 10 апреля 2022, 03:55
+
0
И пожалуйста мартингейл и трал, я могу стать поручителям )
avatar

  9  Najj Сообщений: 104

  • 9 апреля 2022, 14:11
+
0
Ето не то стратегия чтобы использовать мартингейл или трейлиг стоп а вот с индикатором можно доработать
Редактирован: 9 апреля 2022, 14:18
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 9 апреля 2022, 14:17
+
0
усовершенствовал индикатор корал: www.opentraders.ru/downloads/3287/



сейчас дельта считается автоматически по первому видимому бару. если поставить настройку бар больше нуля, будет считать дельту по указанному бару справа:


input int bar=55;


внес небольшие изменения в советник: www.opentraders.ru/downloads/3288/
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 10 апреля 2022, 10:51
+
0
При периоде 0 или 1 дельты нету, хотя между EURUSD и GBPUSD дельта есть, а там просто 2 линии друг на друге
avatar

  5  iluamoney Сообщений: 78

  • 10 апреля 2022, 20:01
+
0
Уважаемый Андрей советник не работает
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 10 апреля 2022, 11:53
+
0
что конкретно не работает?
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 10 апреля 2022, 12:00
+
0
В тестовое не тестируется сейчас буду разобраться в чем причина
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 10 апреля 2022, 12:03
+
0
Не нашёл причину не работает в тесторе
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 10 апреля 2022, 12:11
+
0
вы не даете достаточно информации чтобы разобраться. нужны логи скрины настройки и т.д. так я вам ничем не помогу
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 10 апреля 2022, 12:27
+
0
У вас работать на тесторе
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 10 апреля 2022, 12:29
+
0
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 10 апреля 2022, 12:32
+
0
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 10 апреля 2022, 12:33
+
0
Когда нажимаю старт ничего не происходит
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 10 апреля 2022, 12:34
+
0
что в журнале пишет?
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 10 апреля 2022, 12:51
+
0
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 10 апреля 2022, 13:11
+
0
Вот пожалуйста посмотрите
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 10 апреля 2022, 13:12
+
0
терминал индикатор не читает
avatar

  35  AM2 Сообщений: 16250 - Андрей

  • 10 апреля 2022, 16:04
+
0
На другом терминале работает
avatar

  5  stepanyan77 Автор Сообщений: 100 - Artur Stepanyan

  • 10 апреля 2022, 15:36
+
0
Не хочется вас расстраивать, но на форексе парный трейдинг — это только переплата лишней комиссии за открытие ордеров по двум валютам, вместо открытия одного по их кроссу.
Всё потому, что все валюты математически жестко завязаны между собой, например:
BUY EurGbp = BUY EurUsd + SELL GbpUsd
А так называемое «расхождение» двух валютных пар ни что иное как волатильность их кросс курса.
Ну а из-за того, что при осуществлении входов по двум валютным парам их лотность неуравновешивается может сложится обманчивое впечатление, что вы поймали рынок за *friends* 

avatar

  2  fxbooster Сообщений: 27 - fxbooster

  • 10 апреля 2022, 23:21
+
0
Но предложение отправить Канта в Соловки не только не поразило иностранца, но даже привело в восторг. — Именно, именно, — закричал он, и левый зеленый глаз его, обращенный к Берлиозу, засверкал, — ему там самое место! Ведь говорил я ему тогда за завтраком: «Вы, профессор, воля ваша, что‑то нескладное придумали! Оно, может, и умно, но больно непонятно. Над вами потешаться будут».

М. Булгаков. «Мастер и Маргарита»


Может быть Вы имели в виду BUY EurGbp = BUY EurUsd / SELL GbpUsd
Но и здесь не угадали. Проверьте сами:

//+------------------------------------------------------------------+
//|                                                          fxb.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                          http://www.mункцql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mункцql5.com"
#property version   "1.00"
#property strict


extern string Symb1      = "EURUSD";
extern string Symb2      = "GBPUSD";
extern string Symb3      = "EURGBP";

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---BUY EurGbp = BUY EurUsd + SELL GbpUsd
   double s1=0,s2=0,s3=0,hedg1=0,hedg2=0;
   s1=MarketInfo(Symb1,MODE_BID);
    s2=MarketInfo(Symb2,MODE_BID);
     s3=MarketInfo(Symb3,MODE_BID); 
      hedg1=MarketInfo(Symb1,MODE_BID)/MarketInfo(Symb2,MODE_BID);
       hedg2=MarketInfo(Symb1,MODE_BID)-MarketInfo(Symb2,MODE_BID);
      
    Comment("\n Пара 1: ",DoubleToString(s1,5),
           "\n Пара 2 ",DoubleToString(s2,5),
           "\n Пара 3 ",DoubleToString(s3,5),
           "\n Хедж деление: ",DoubleToString(hedg1,5),
           "\n Дельта Хедж классика пара3 - хедж деление: ",DoubleToString((s3-hedg1),5),
           "\n Хедж вычитание: ",DoubleToString(hedg2,5));
  }
//+------------------------------------------------------------------+


Для меня
Так это ясно, как простая гамма.

Александр Пушкин.
«Моцарт и Сальери»

avatar

  16  ssg Сообщений: 817

  • 11 апреля 2022, 04:53
+
0
По Вашему получается вековая мудрость: «Не класть все яйца в одну корзину», это
глупость?:) 
avatar

  16  ssg Сообщений: 817

  • 11 апреля 2022, 04:57
+
0
Ок, раз ты такой умный найди 10 отличий:
на верхнем скрине толстая линия = результат по двум мажерикам, по сути тот же MACD с FastMA = 12 по еврику и SlowMA = 26 по фунту
а на нижнем результат простого MACD 12.26.1 на фунте
это я тебе не для споров, а для того, чтобы не тешили себя надеждами на грааль парного трейдинга, т.к. применительно к форе — это тот же… только вид сбоку + двойная комиссия на сделках <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; '>&nbsp; 





а по поводу BUY EurGbp = BUY EurUsd + SELL GbpUsd я имел ввиду не математический + а то что BUY EurGbp это то же самое, что BUY EurUsd и SELL GbpUsd и естественно для того, чтобы всё сошлось математически их лотность надо уравновешивать относительно друг друга, но посмотрев на скрины выше — становится итак всё ясно ;) 
Редактирован: 11 апреля 2022, 17:35
avatar

  2  fxbooster Сообщений: 27 - fxbooster

  • 11 апреля 2022, 16:38
+
0
Во первых, я с Вами «вместе не бухал и катран на заваленке не катал», так что тыкайте куда нибудь сами себе.
Во вторых, да я умный, и мне хватает ума не брать Ма одного инструмента с одним периодом и от него отнимать другую Ма другого инструмента с другим периодом(с кагого «бодуна») и по этим данным строить некий график.
Затем брать график третьего инструмента вычислять разницу 2-х Ма этого, третьего, инструмента, но разными периодами.
И уже затем сравнивать эти два значения между собой.
Но даже и здесь «косяк»:
на графике eurusd 5m эта разница равна -0.0286,
на графике eurgbp 5m эта разница равна -0.000171.
Да, я умный, я просто напишу себе индикатор или советник-информатор и буду анализировать текущую цену, а не некоторый усредненный суррогат.
Единственное, с чем я согласен, это то, что стратегия далека от идеала, тем более в настоящий момент.
Вступать в прения и спор не буду, нет ни темы спора ни желания.*hi* 
Редактирован: 11 апреля 2022, 17:41
avatar

  16  ssg Сообщений: 817

  • 11 апреля 2022, 17:40
+
0
Так происходит из-за разной волатильности, разной стоимости пункта, и разной стоимости открытия позиции.
avatar

  9  Shtenco Сообщений: 238

  • 11 июля 2022, 05:33
+
0
то есть этот наглядный пример несостоятельности твоих ожиданий от парного трейдинга ты вообще не понял… называется смотрю, но не вижу *???* 
ну ок пиши индикатор/советник/скрипт, только когда обнаружишь, что независимо от того каким индикатором/советником/скриптом ты будешь измерять раздвижку между инструментами, очень часто будет происходить так, что по индикатору/советнику/скрипту раздвижка уже схлопнулась, а по деньгам ты всё ещё в минусе, подумай почему так происходит и возможно станешь ещё умнее
Всего хорошего *hi* 
Редактирован: 12 апреля 2022, 06:32
avatar

  2  fxbooster Сообщений: 27 - fxbooster

  • 12 апреля 2022, 06:25
+
0
Изучал и практиковал парный два года почти. Могу сказать что в советнике сильно не хватает разных лотов на две пары. Без них будет набираться высокая просадка. Почитайте статью United Traders на эту тему
avatar

  9  Shtenco Сообщений: 238

  • 10 июля 2022, 02:34
+
0
Ребята! Давайте попросим Андрея добавить разные лоты на две пары! Скачайте любой индикатор спреда с подбором лота, и поймете что в таком виде парный — Грааль! Если учитываются весовые коэффициенты, спред ходит ровно туда-сюда, без особых отклонений!
avatar

  9  Shtenco Сообщений: 238

  • 11 июля 2022, 05:37
+
0
Что-бы не отвлекать Андрея.Надеюсь он не против.

//+------------------------------------------------------------------+
//|                                                       Corel2.mq5 |
//|                                              Copyright 2022, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>             // Подключаем торговый класс CTrade
CTrade trade;

//--- входные параметры
input double   Lot        = 1;         // Лот

input string   Symb       = "USDCHF";  // 2-й символ

input double   LotSymb        = 1;         // Лот

input int      Loss       = 0;         // Лось в валюте
input int      Profit     = 50;        // Профит в валюте

input double   Sigma      = 333;       // Расхождение пар
input bool     CloseCross = 1;         // Закрытие по пересечению

input int      Slip       = 0;         // Проскальзывание
input ulong    Magic      = 123;       // Магик

input string IndName      = "Coral";
input int bar             = 55;

int ind=0;
double s1[2],s2[2];
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ind=iCustom(NULL,0,IndName,Symb,bar);
   trade.SetExpertMagicNumber(Magic);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|  Position Profit                                                 |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double p=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            p+=PositionGetDouble(POSITION_PROFIT);
           }
        }
     }
   return(p);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            if(PositionGetInteger(POSITION_TYPE)<2)
              {
               trade.PositionClose(PositionGetTicket(i));
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            if(PositionGetInteger(POSITION_TYPE)<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double Ask1=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid1=SymbolInfoDouble(_Symbol,SYMBOL_BID);

   double Ask2=SymbolInfoDouble(Symb,SYMBOL_ASK);
   double Bid2=SymbolInfoDouble(Symb,SYMBOL_BID);

   double sigma=MathAbs(s1[0]-s2[0])/_Point;

   CopyBuffer(ind,0,0,2,s1);
   CopyBuffer(ind,1,0,2,s2);

   if(t!=iTime(NULL,0,0))
     {
      if(CountTrades()<1 && sigma>Sigma)
        {
         if(s1[0]<s2[0])
           {
            trade.Buy(Lot,_Symbol,Ask1,0,0,"");
            trade.Sell(LotSymb,Symb,Bid2,0,0,"");
           }

         if(s1[0]>s2[0])
           {
            trade.Sell(Lot,_Symbol,Bid1,0,0,"");
            trade.Buy(LotSymb,Symb,Ask2,0,0,"");
           }
        }

      if((AllProfit()>Profit && Profit>0) || (AllProfit()<-Loss && Loss>0) || (s1[0]>s2[0] && s1[1]<s2[1]&& CloseCross) || (s1[0]<s2[0] && s1[1]>s2[1] && CloseCross))
         CloseAll();

      t=iTime(NULL,0,0);
     }

   Comment("\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit(),
           "\n Sigma: ",sigma,
           "\n Symbol1: ",s1[0],
           "\n Symbol2: ",s2[0]);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

avatar

  16  ssg Сообщений: 817

  • 11 июля 2022, 10:48
+
0
Спасибо огромное вам! Сейчас в советнике осталась лишь одна проблема — «зависание» сильно разошедшихся коррелирующих пар! Но ее МОЖНО решить на раз! Если добавить закрытие по времени, по барам! Посмотрите тестер: при небольшом расхождении 99% сделок закрываются за 5-6 часов. Соответственно, если сделки зависшие удалять, то советник будет настоящим Граалем!))))))Уж извините за наглость, просто я столько лет верил в парный трейдинг, все советники платные и достаточно дорогие и к тому же используют сетку (кмиллион), а тут уникальный советник, который вообще можно сделать Граалем!)
avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 01:44
+
0
А как определяете: зависли позиции или нет? Т.е. как определить, что пора закрывать позиции.
avatar

  16  ssg Сообщений: 817

  • 19 июля 2022, 03:12
+
0
По часам: ведь в тестере, при вызове статистики, видно что при небольшом расхождении за пять часов закрываются около 99% сделок. Тот 1% который остается, это и есть убыточные сделки, которые зависают на месяцы. Логика в том чтобы их сразу отсекать закрытием по времени от начала открытия парной сделки
avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 05:09
+
0
Вот, видите? Большинство сделок кроются очень быстро. А убыточные держатся дольше, отсечем их — будет прибыль
avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 05:30
+
0
А чем не устраивает закрытие по размеру убытка:
|| (AllProfit()<-Loss && Loss>0

avatar

  16  ssg Сообщений: 817

  • 19 июля 2022, 10:37
+
0
Попробуйте такой вариант.
Единственная просьба выложить здесь итоги эффективности тестирования советника с данной функцией с вашими рекомендациями её использования при данном методе торговли (парная торговля).


//+------------------------------------------------------------------+
//|                                                       Corel2.mq5 |
//|                                              Copyright 2022, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>             // Подключаем торговый класс CTrade
#include <Trade\PositionInfo.mqh>
CTrade trade;
CPositionInfo  m_position;  

//--- входные параметры
input double   Lot        = 1;         // Лот

input string   Symb       = "USDCHF";  // 2-й символ

input double   LotSymb    = 1;         // Лот

input int      Loss       = 0;         // Лось в валюте
input int      Profit     = 50;        // Профит в валюте

input double   Sigma      = 333;       // Расхождение пар
input bool     CloseCross = 1;         // Закрытие по пересечению

input bool     CloseHour  = 1;         // Закрытие по пересечению
input uchar    AfterHour  = 5;         // Закрыть позиции через AfterHour часов

input int      Slip       = 0;         // Проскальзывание
input ulong    Magic      = 123;       // Магик

input string IndName      = "Coral";
input int bar             = 55;

int ind=0;
double s1[2],s2[2];
datetime t=0;
long    afterhour  = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ind=iCustom(NULL,0,IndName,Symb,bar);
   trade.SetExpertMagicNumber(Magic);
   afterhour  = 0;
   afterhour=AfterHour*60*60;
   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|  Position Profit                                                 |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double p=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            p+=PositionGetDouble(POSITION_PROFIT);
           }
        }
     }
   return(p);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            if(PositionGetInteger(POSITION_TYPE)<2)
              {
               trade.PositionClose(PositionGetTicket(i));
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            if(PositionGetInteger(POSITION_TYPE)<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAfterHour()
  {
//---
   for(int i=PositionsTotal()-1; i>=0; i--) 
      if(m_position.SelectByIndex(i))
        {
         if(TimeCurrent()-m_position.Time()>=afterhour)
            m_trade.PositionClose(m_position.Ticket());
        }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double Ask1=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid1=SymbolInfoDouble(_Symbol,SYMBOL_BID);

   double Ask2=SymbolInfoDouble(Symb,SYMBOL_ASK);
   double Bid2=SymbolInfoDouble(Symb,SYMBOL_BID);

   double sigma=MathAbs(s1[0]-s2[0])/_Point;

   CopyBuffer(ind,0,0,2,s1);
   CopyBuffer(ind,1,0,2,s2);
        
   if(CloseHour)CloseAfterHour();

   if(t!=iTime(NULL,0,0))
     {
      if(CountTrades()<1 && sigma>Sigma)
        {
         if(s1[0]<s2[0])
           {
            trade.Buy(Lot,_Symbol,Ask1,0,0,"");
            trade.Sell(LotSymb,Symb,Bid2,0,0,"");
           }

         if(s1[0]>s2[0])
           {
            trade.Sell(Lot,_Symbol,Bid1,0,0,"");
            trade.Buy(LotSymb,Symb,Ask2,0,0,"");
           }
        }

      if((AllProfit()>Profit && Profit>0) || (AllProfit()<-Loss && Loss>0) || (s1[0]>s2[0] && s1[1]<s2[1]&& CloseCross) || (s1[0]<s2[0] && s1[1]>s2[1] && CloseCross))
         CloseAll();
     
      t=iTime(NULL,0,0);
     }

   Comment("\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit(),
           "\n Sigma: ",sigma,
           "\n Symbol1: ",s1[0],
           "\n Symbol2: ",s2[0]);
  }
//+------------------------------------------------------------------+
avatar

  16  ssg Сообщений: 817

  • 19 июля 2022, 11:41
+
0
По возможности с таблицами и графиками. Думаю многих это заинтересует.В дальнейшем может появятся мысли и предложения по развитию данной темы в направлении эффективности использования стратегии.
avatar

  16  ssg Сообщений: 817

  • 19 июля 2022, 11:49
+
0
Огромное спасибо вам!!! Большие надежды на эту сову!!! Как заказ сдам по работе, сяду сегодня же тестировать!!!VPS у меня куплен еще дней на 25, поставлю там теститься если прогоны в тестере будут внушать надежду!!! Обо всем буду писать сюда, какие результаты!!!
avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 12:06
+
0
Ошибка при компиле(
avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 12:13
+
0
Проверьте наличие класса #include <Trade\PositionInfo.mqh> у вас в редакторе как у класса #include <Trade\Trade.mqh>
avatar

  16  ssg Сообщений: 817

  • 19 июля 2022, 12:21
+
0
Да я уже исправил сам)Вот тест за два года с грамотным подбором лота, выбраны долгосрочно коррелирующие пары AUDUSD и NZDUSD:
avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 12:37
+
0
По долгосрочно коррелирующим парам просадка терпимая.Я их выбираю на дневных графиках скриптом BEST CORRELATION от всем известного кмиллиона) А лот подбираю также на дневках, с помощью индикатора i-Diff2Pairs.
avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 12:39
+
0
К сожалению вот только, гипотеза с закрытием по времени не удалась(Увы.
avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 12:39
+
0
Но уже даже простой подбор лота уже много результата дал, потому что вот тест за тот же период и на тех же парах с одинаковым лотом на 2 пары, без приведения к общей волатильности:

avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 12:42
+
0
С приведением к общей волатильности вполне можно работать. У меня на VPS еще дней 25 осталось. Сегодня либо завтра подберу пары, настройки, лоты, и постаавлю на VPS)О результатах буду сообщать. Получился вполне рабочий сов!!! СПАСИБО ОГРОМНОЕ РЕБЯТА!!!
avatar

  9  Shtenco Сообщений: 238

  • 19 июля 2022, 12:44
+
0
Вот вариант с функцией закрытия от Андрея.


//+------------------------------------------------------------------+
//|                                                       Corel2.mq5 |
//|                                              Copyright 2022, AM2 |
//|                                     https://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, AM2"
#property link      "https://www.forexsystems.biz"
#property version   "1.00"

#include <Trade\Trade.mqh>             // Подключаем торговый класс CTrade
CTrade trade;

//--- входные параметры
input double   Lot        = 1;         // Лот

input string   Symb       = "USDCHF";  // 2-й символ

input double   LotSymb    = 1;         // Лот

input int      Loss       = 0;         // Лось в валюте
input int      Profit     = 50;        // Профит в валюте

input double   Sigma      = 333;       // Расхождение пар
input bool     CloseCross = 1;         // Закрытие по пересечению

input bool     CloseHour  = 1;         // Закрытие по пересечению
input uchar    AfterHour  = 5;         // Закрыть позиции через AfterHour часов

input int      Slip       = 0;         // Проскальзывание
input ulong    Magic      = 123;       // Магик

input string IndName      = "Coral";
input int bar             = 55;

int ind=0;
double s1[2],s2[2];
datetime t=0;
long    afterhour  = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ind=iCustom(NULL,0,IndName,Symb,bar);
   trade.SetExpertMagicNumber(Magic);
   afterhour  = 0;
   afterhour=AfterHour*60*60;
   
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|  Position Profit                                                 |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double p=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            p+=PositionGetDouble(POSITION_PROFIT);
           }
        }
     }
   return(p);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            if(PositionGetInteger(POSITION_TYPE)<2)
              {
               trade.PositionClose(PositionGetTicket(i));
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetInteger(POSITION_MAGIC)==Magic)
           {
            if(PositionGetInteger(POSITION_TYPE)<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAfterHour()
  {
//---
   for(int i=PositionsTotal()-1; i>=0; i--) 
      if(m_position.SelectByIndex(i))
        {
         if(TimeCurrent()-m_position.Time()>=afterhour) CloseAll();
        }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double Ask1=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
   double Bid1=SymbolInfoDouble(_Symbol,SYMBOL_BID);

   double Ask2=SymbolInfoDouble(Symb,SYMBOL_ASK);
   double Bid2=SymbolInfoDouble(Symb,SYMBOL_BID);

   double sigma=MathAbs(s1[0]-s2[0])/_Point;

   CopyBuffer(ind,0,0,2,s1);
   CopyBuffer(ind,1,0,2,s2);
        
   if(CloseHour)CloseAfterHour();

   if(t!=iTime(NULL,0,0))
     {
      if(CountTrades()<1 && sigma>Sigma)
        {
         if(s1[0]<s2[0])
           {
            trade.Buy(Lot,_Symbol,Ask1,0,0,"");
            trade.Sell(LotSymb,Symb,Bid2,0,0,"");
           }

         if(s1[0]>s2[0])
           {
            trade.Sell(Lot,_Symbol,Bid1,0,0,"");
            trade.Buy(LotSymb,Symb,Ask2,0,0,"");
           }
        }

      if((AllProfit()>Profit && Profit>0) || (AllProfit()<-Loss && Loss>0) || (s1[0]>s2[0] && s1[1]<s2[1]&& CloseCross) || (s1[0]<s2[0] && s1[1]>s2[1] && CloseCross))
         CloseAll();
     
      t=iTime(NULL,0,0);
     }

   Comment("\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit(),
           "\n Sigma: ",sigma,
           "\n Symbol1: ",s1[0],
           "\n Symbol2: ",s2[0]);
  }
//+------------------------------------------------------------------+
avatar

  16  ssg Сообщений: 817

  • 19 июля 2022, 12:56
+
0
Как то быстро сломались и закончили тестирование.
Можно попробовать закрывать позиции по времени:
— если прибыль менее некоторого значения меньше чем input int Profit = 50;
(предполагается что прибыль уже расти не будет в перспективе).
— или если уже имеется убыток меньше чем input int Loss = 0;
(предполагается что в дальше убыток будет только возрастать).
Можно для этих обоих случаях можно использовать разное время жизни позиций
input uchar AfterHour = 5;
Не уверен, что будет явное преимущество, но а вдруг. Причем эти условия надо тестировать при параметрах используемых в Сообщений: 13.
Т.е. у вас есть хороший результат при этих параметрах, а что будет если ввести дополнительные условия?
avatar

  16  ssg Сообщений: 817

  • 19 июля 2022, 13:16
+
0
Можно посмотреть код
А лот подбираю также на дневках, с помощью индикатора i-Diff2Pairs.
avatar

  16  ssg Сообщений: 817

  • 19 июля 2022, 15:42
+
0
Кода на этот индюк увы, нет, он везде в закрытом виде(((
avatar

  9  Shtenco Сообщений: 238

  • 20 июля 2022, 06:00
+
0
Ну на нет, и суда нет. Хотел посмотреть методику расчета лотов пар.Тогда можно было бы сразу прописать в советнике.
avatar

  16  ssg Сообщений: 817

  • 20 июля 2022, 09:19
+
0
Вырезал функцию автоматического расчета лотов из одного из своих старых мультивалютников и сделал в виде советника.

//+------------------------------------------------------------------+
//|                                        Lot symb1 & Lot symb2.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                          http://www.mункцql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mункцql5.com"
#property version   "1.00"
#property strict

input string  SYMBOL1        = "EURUSD"; //второй символ
input string  SYMBOL2        = "GBPUSD"; //первый символ


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    double ynax=MarketInfo(SYMBOL1, MODE_TICKVALUE)/MarketInfo(SYMBOL2, MODE_TICKVALUE)*
   (iOpen(SYMBOL1,0,0)/MarketInfo(SYMBOL1, MODE_TICKSIZE))/(iOpen(SYMBOL2,0,0)/MarketInfo(SYMBOL2, MODE_TICKSIZE));

   double minx=0, miny=0, mindelta=9999;

   for (double x=0.01; x<=1; x+=0.01)
    {
   for (double y=0.01; y<=1; y+=0.01)
     {
      double delta=MathAbs(y/x-ynax);
      if (delta<mindelta)
        {
         minx=NormalizeDouble(x,2);
         miny=NormalizeDouble(y,2);
         mindelta=NormalizeDouble(delta,2);
        }
      }
    }

string LotsS1  = DoubleToStr(minx,2);   
string LotsS2  = DoubleToStr(miny,2); 

Comment(TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),
        " \n Символ №1 - "+SYMBOL1+"  "+DoubleToString(LotsS1,2),
        " \n Символ №2 - "+SYMBOL2+"  "+DoubleToString(LotsS2,2)
        );
         
  }
//+------------------------------------------------------------------+



Запустите у себя. Интересно посмотреть и сравнить что покажет ваш индикатор и мой советник. Насколько большая будет разница. Ну и в идеале сравнить работу советника в тестере с лотами рассчитанными вашим индикатором и моим советником.
Если не затруднит выложите результаты таких сравнений здесь.
avatar

  16  ssg Сообщений: 817

  • 20 июля 2022, 10:00
+
0
Что не получается сравнить размеры лотов?
avatar

  16  ssg Сообщений: 817

  • 21 июля 2022, 21:27

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