0
Готов быть поручителем.
*hi* 
avatar

ssg

  • 29 мая 2023, 01:39
0

   Comment("\n Prosadka: ",NormalizeDouble(Pro(),2)," %");
avatar

ssg

  • 10 мая 2023, 19:59
0
<code>
input string   Symb1     = "EURUSD";  // 1-й символ
input string   Symb2     = "GBPUSD";  // 2-й символ
input string   Symb3     = "EURGBP";  // 3-й символ

input double   Delta     = 50;        // дельта
</code>


<code>
void OnTick()
  {
   double Ask1=SymbolInfoDouble(Symb1,SYMBOL_ASK);
   double Ask2=SymbolInfoDouble(Symb2,SYMBOL_ASK);
   double Ask3=SymbolInfoDouble(Symb3,SYMBOL_ASK);

   double Bid1=SymbolInfoDouble(Symb1,SYMBOL_BID);
   double Bid2=SymbolInfoDouble(Symb2,SYMBOL_BID);
   double Bid3=SymbolInfoDouble(Symb3,SYMBOL_BID);

   double Synt=((Ask1/Bid2)-Ask3)/_Point;

   double Spread1=Ask1-Bid1*_Point;
   double Spread2=Ask2-Bid2*_Point;
   double Spread3=Ask3-Bid3*_Point;

   if(AllProfit()>Profit || AllProfit()<-Loss)
      CloseAll();
    
   if(PositionsTotal()<1)
     {
      if((Synt)<-Delta)
        {
         trade.PositionOpen(Symb1,1,Lot,Bid1,0,0);
         trade.PositionOpen(Symb2,1,Lot,Bid2,0,0);
         trade.PositionOpen(Symb3,0,Lot,Ask3,0,0);
        }

      if((Synt)>Delta)
        {
         trade.PositionOpen(Symb1,0,Lot,Ask1,0,0);
         trade.PositionOpen(Symb2,0,Lot,Ask2,0,0);
         trade.PositionOpen(Symb3,1,Lot,Bid3,0,0);
        }
     }

   Comment("\n Прибыль : ",AllProfit(),
           "\n Синтетик : ",(Synt));
  }
</code>


Вычисляется искуственный Аск двух пар = (Ask1/Bid2);
Затем находится разность искуственного Аск и реального Аск третьей пары .
<code>double Synt=((Ask1/Bid2)-Ask3)/_Point;</code>

Это значение и сравнивается с контрольным Delta.
В зависимости от ситуации и принимается решение.
<code>
 if(PositionsTotal()<1)
     {
      if((Synt)<-Delta)
        {
         trade.PositionOpen(Symb1,1,Lot,Bid1,0,0);
         trade.PositionOpen(Symb2,1,Lot,Bid2,0,0);
         trade.PositionOpen(Symb3,0,Lot,Ask3,0,0);
        }

      if((Synt)>Delta)
        {
         trade.PositionOpen(Symb1,0,Lot,Ask1,0,0);
         trade.PositionOpen(Symb2,0,Lot,Ask2,0,0);
         trade.PositionOpen(Symb3,1,Lot,Bid3,0,0);
        }
     }

</code>

avatar

ssg

  • 9 мая 2023, 10:31
0
Посмотрите предыдущий топик
информационный индикатор

Андрей как раз и сделал подобное. Переделайте под себя. Замените условие и текст сообщения.
Всех поздравляю с Днем Великой Победы!
avatar

ssg

  • 9 мая 2023, 00:20
0
А во теперь это скопируйте в Метаэдитер и скомпилируйте. Как не понимаете, что синтаксис Метаэдитера и сообщения разные. Прикрепляйте через code
<code>


<code>//+------------------------------------------------------------------+
//|                                  TriangularMA centered bands.mq4 |
//|                                                           mladen |
//| forex-tsd elite section only                                     |
//+------------------------------------------------------------------+
#property copyright "mladen"
#property link      "mladenfx@gmail.com"
</code>


А так как выложил alex30774 при копировании и компеляции ошибок не будет! Вы хоть проверяйте что другим предлагаете. Или это преднамеренно делаете?
avatar

ssg

  • 23 апреля 2023, 22:40
0
Поторопился похвалить. Используйте функцию

code

Сейчас если то что выложено скопировать в метаэдитер в таком виде будет куча ошибок при компиляции. Сами попробуйте. Вы почему так небрежно относитесь к участникам сайта. Что то выложили примитивным образом. При таком отношении к людям ждите соответствующего отношения.
avatar

ssg

  • 21 апреля 2023, 17:56
0
Вот видите как всё просто оказалось. Было бы желание.*hi* 
avatar

ssg

  • 21 апреля 2023, 15:57
0
Попробуйте сюда. Открытым кодом. Использую функцию:
<code>
code
</code>
avatar

ssg

  • 21 апреля 2023, 15:50
0
Так и думал. Техническая ошибка.
*hi* 
avatar

ssg

  • 19 апреля 2023, 19:02
0
Андрей, не понял этот кусок кода в главной функции:
if(last-Bid>Step*_Point && Side==0)
     {
      PutOrder(4,Bid+Step*_Point);
      last=Bid;
     }

   if(Bid-last>Step*_Point && Side==1)
     {
      PutOrder(1,Bid);
      last=Bid;
     }

почему для покупок стоповый ордер, а для продажи открывается позиция?
avatar

ssg

  • 19 апреля 2023, 17:38
0
Смутила фраза:
Цикл завершается после того, как закроется самый ранний стоповый ордер

Значит не правильно понял.
avatar

ssg

  • 17 апреля 2023, 13:48
0
У Андрея куча уже готовых советников-полуавтоматов с кнопками. Просто в один он наверняка может прописать функцию выставления очередного стопордера. Как я понял у Вас что-то вроде обратного пирамидинга. Цена будет активизировать ордера при обратном движении.
avatar

ssg

  • 17 апреля 2023, 09:03
0
Так в полуавтомате так и есть и даже больше.
Нажал кнопку бай (селл) советник начал исполнять программу. При желании пользователь сам может дополнительно открывать позиции с экрана кнопками.
Цикл закончился- пока не нажмёшь кнопку бай (селл) торговля не начнётся. В вашем варианте вместо этого надо набрасывать советник на график. А для этого надо еще найти советник в базе советников у себя. Потом прописать ещё и настройки, а я полагаю шаг стопордеров для разных пар должен быть разный.
Но конечно в данном случае «хозяин-марин».
avatar

ssg

  • 17 апреля 2023, 08:34
0
А что мешает поменять магик и поставить на другую пару со своими настройками.
прописать в блоке открытие проверку
<code>if(OrderSymbol()==Symbol_ && OrderMagicNumber()==Magic)</code>

и советник будет работать только с этой парой и этим магиком.
avatar

ssg

  • 17 апреля 2023, 08:05
0
Я же указал в тз, что после завершения цикла, советник убирается с графика. Знакомые прогеры говорят, что это сделать просто.

Это можно прописать функцией, но и это не совсем уж просто.
Т.е. потом опять нужно будет накидывать советник на график.
Не проще и удобнее использовать именно полуавтомат, в его истинном значении, с кнопками «Купить — Продать».
И ещё вопрос: не рассматривалось ли возможность открытия сразу встречной позиции? Одна позиция набирает прибыль, частично компенсируя убыток, пока к минусовой выставляются стоповыё ордера.
Причём прибыльную позицию можно закрывать частями или тралить её.
Таким образом можно будет частично компенсировать убыток той позиции, которая набирает минус.
avatar

ssg

  • 17 апреля 2023, 07:54
0
Советник будет работать в цикле. После закрытия позиции (позиций) он сразу выставит новый ордер. В противном случае необходимо будет прописывать какие
то ограничения.
Или советник должен будет активироваться только после нажатия соответствующей кнопки на экране.
Тогда можно будет вести торговлю в обе стороны одновременно.
*hi* 

avatar

ssg

  • 17 апреля 2023, 05:38
0
verta81, привет. Правильно, стой на своем. Как я.
Есть отчёт за месяц — есть советник!
У каждой бесплатной «хотелки» есть своя цена. Или красивая, новая идея, или отчёт заказчика работы руками.
Для себя не пробовал прогнать свой советник по тикам.
Ответ можно в «Приват».
avatar

ssg

  • 16 апреля 2023, 04:37