LeonidPetr

 
Уровень 2

  Торгую в компаниях:


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

Рейтинг 2089



РЕКОМЕНДУЮ



Доработка советника

Добрый день.
Может подскажет кто-нибудь? На тестере все работает как часы, как подключаю его на несколько валютных пар, начинается выставление кучи ордеров, не открываются какие нужно и не закрываются как нужно отложенные ордера. Пробовал исправить путем добавления кодов по выбору ордеров, но все больше заходил в тупик. Наверняка есть какой-то простой код, чтобы все происходило как на тестере.
Спасибо, что прочли))
  • 0
  • Просмотров: 2138
  • 25 июня 2021, 12:03
  • LeonidPetr
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
+1
"— Вот что, — сказал Эдик. — Так нельзя. Мы работаем, как дилетанты. Как авторы любительских писем: «Дорогие учёные. У меня который год в подполе происходит подземный стук. Объясните, пожалуйста, как он происходит»."

А. Стругацкий, Б. Стругацкий.
«Понедельник начинается в субботу»
avatar

  24  ShamanHand Сообщений: 1092 - Наношу добро, причиняю пользу.

  • 25 июня 2021, 12:21
+
0
мы все из дилетантов пришли… и у всех были вопросы.
Прежде чем задать тут вопрос, поверьте, я немало перекопал советников и вариантов… но, что-то, видимо еще недопонимаю…
avatar

  2  LeonidPetr Автор Сообщений: 22

  • 25 июня 2021, 18:45
+
+1
а магики разные не проболи ставить?
avatar

  22  igrun Сообщений: 1574 - igrun

  • 25 июня 2021, 12:50
+
0
на каждую пару свой магик номер
avatar

  2  LeonidPetr Автор Сообщений: 22

  • 25 июня 2021, 18:42
+
0
Советник где?
avatar

  13  verta81 Сообщений: 355

  • 25 июня 2021, 17:34
+
0
extern int StochK=200;                  
extern int StochD=12;                   
extern int StochSlowing=1;            
extern int UpperThreshold=80;         
extern int LowerThreShold=20;
extern int Mn=140;      //Magic
extern int mn;
extern int X=1;
extern int TimFr1=48, TimFr2=24,TimFr3=4;
extern int n=6;
extern double Lot1;
extern double lots;
extern double Lot;

int Ontime()
  {
   int time=0;
   if((Hour()==2&&Minute()<=1)||(Hour()==2&&Minute()==30)||(Hour()==3&&Minute()<=1))

      time=1;

   return(time);
  }


void PutOrderStop(int order_type,double price,double SL,double TP,int Magic)
  {
   int sellstop=0;

   sellstop=OrderSend(Symbol(),order_type,Lot,price,0,SL,TP,"My order#",Mn,0,Red);
   return;
  }


int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Mn)
           {
            if(OrderType()<4)
               count++;
           }
        }
     }
   return(count);
  }
//=========================================================
int BuyTicket;
int SellTicket;


int start()
  {
   double S=AccountMargin() +  AccountFreeMargin();

   int OPB1,OPS1,ss;

   int T=7*X;
   double AA = iClose(NULL,PERIOD_H1,TimFr1),BB = iClose(NULL,PERIOD_H1,TimFr2),
          CC=iClose(NULL,PERIOD_H1,1),AK = iOpen(NULL,PERIOD_H1,4);

   if(S<10000000)
      lots= S*0.0002;

   double AC=(CC-AA)/Point,AKC=(CC-AK)/Point,BC=(CC-BB)/Point;
   double TR = AC;
  double Signal=iStochastic(Symbol(),0,StochK,StochD,StochSlowing,MODE_SMA,STO_LOWHIGH,MODE_SIGNAL,1);
   double Main=iStochastic(Symbol(),0,StochK,StochD,StochSlowing,MODE_SMA,STO_LOWHIGH,MODE_MAIN,1);
   double Last=iStochastic(Symbol(),0,StochK,StochD,StochSlowing,MODE_SMA,STO_LOWHIGH,MODE_BASE,2);
  int s,SS;
   if(Signal>Main)
     {
      double m=Signal/(Main+0.0001);
     }
   else
      if(Signal<Main)
         m=Main/(Signal+0.0001);
   double ma=m*100;
   int DSM=Signal-Main;
   int DMS=Main-Signal;

  
      if(Signal>Main&&Signal<70)
        {
         if((DSM>10&&DSM<30)&&((ma>100&&ma<115)||(ma>120&&ma<700)))
           {OPB1=1; ss=m*Signal; if(ss<90)ss=m*70;if(ss>100)ss=100; SS=ss;}
            else
               if(((ma>105&&ma<105)||(ma>125&&ma<140)||(ma>145&&ma<700)))
                 {OPS1=1; ss=m*Main; if(ss<90)ss=m*90;if(ss>120)ss=110; SS=150;} 
        }

      

   
  s=ss/(n-1);//отработка
   s=s*X;
   ss=ss*X;
   SS=SS*X;

  double Bstoploss,Sstoploss;
   Bstoploss=Bid-ss*Point;
   Sstoploss=Ask+ss*Point;
   int PriceBuy=ss-s-10;
   int PriceSell=ss-s-10;
   double BstopOpen =Ask+ PriceBuy*Point;
   double SstopOpen =Bid- PriceSell*Point;
   double BuyStopLoss=Bid-ss*Point,SellStopLoss=Ask+ss*Point;
   double BstopOpenLoss = BstopOpen-SS*Point;
   double SstopOpenLoss = SstopOpen+SS*Point;
   double BstopClose = BstopOpen+s*Point;
   double SstopClose = SstopOpen-s*Point;
   Lot=lots*n;
   Lot1=lots*(n+n/2);
double OPBSS=OrderOpenPrice()-30*X*Point;  double OPSSS=OrderOpenPrice()+30*X*Point;

   bool operation=0;
     for(int pos=0;pos<OrdersTotal();pos++)
     {if ( OrderSelect (pos, SELECT_BY_POS) == false )  continue;
      if ( OrderSymbol()==Symbol()) break;}

if(Ontime()==1){
    if(OPB1==1)
        {operation=1;if(operation==1 && (OrderSymbol()!=Symbol()||OrdersTotal()==0))
                int OP=OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,0,Green);
          }
  if( OP>0 )
         {if((OrderSymbol()!=Symbol()||OrdersTotal()==1))
         PutOrderStop(5,SstopOpen,SstopOpenLoss,SstopClose,Mn);}
    
    if(OPS1==1)      
        {operation=1;if(operation==1 &&(OrderSymbol()!=Symbol()||OrdersTotal()==0))
        int OPSs=OrderSend(Symbol(),OP_SELL,lots,Bid,0,Ask+ss*Point,Bid-T*Point,"My order#",mn,0,Red);
        }
     if( OPSs>0 )
         {if((OrderSymbol()!=Symbol()||OrdersTotal()==1))
         PutOrderStop(4,BstopOpen,BstopOpenLoss,BstopClose,Mn);
          }    
        }
     

      

 if(CountTrades()==1){  
 if((OrderSymbol()!=Symbol()||OrdersTotal()==2))
 {  
  BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,Lot1,OPBSS,0,OPBSS-70*X*Point,OPBSS+45*X*Point,"My order#",Mn,0,Blue);}
return(0);
 }

if(CountTrades()==1){ 
if((OrderSymbol()!=Symbol()||OrdersTotal()==2)){
SellTicket=OrderSend(Symbol(),OP_SELLSTOP,Lot1,OPSSS,0,OPSSS+70*X*Point,OPSSS-30*X*Point,"My order#",Mn,0,Red);}
return(0);
}     
   
  if(OrderMagicNumber()==Mn)
     {
      for(int j=OrdersTotal()-1; j>=0; j--)
         if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol()&&OrderMagicNumber())
               int del=OrderDelete(OrderTicket());

            if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol()&&OrderMagicNumber())
               del=OrderDelete(OrderTicket());
           }
      return(0);
     }

   Comment("\n |  SIMsim ", "  Валюта   ",Symbol(),
           "\n |      Значения TR          ",TR,
           "\n |      Значения OrdersTotal()         ",OrdersTotal(),
           "\n |      Значения OPr        ",0,
           "\n |      Значения ma === ",ma,"           Значения total_orders         ",TotalOpenOrders(),
           "\n |      Значения OPB1       ",OPB1,"     Значения OPS1      ",OPS1,
           "\n |      Значения Main       ",Main,"     Значения DSM       ",DSM,"     Значения DMS       ",DMS,
           "\n |      Значения Signal     ",Signal,"     Значения OPBSS      ",OPBSS,"     Значения OPBSS      ",OPSSS,
           "\n |      Значения lots       ",lots,"     Значения OrderOpenPrice()         ",OrderOpenPrice(),
           "\n |      Значения ss         ",ss,"     Значения count      ",CountTrades(),
           "\n |      Mn              ",Mn
          );



   return(0);

  }
avatar

  2  LeonidPetr Автор Сообщений: 22

  • 25 июня 2021, 19:00
+
0
if(OrderMagicNumber()==Mn)
     {
      for(int j=OrdersTotal()-1; j>=0; j--)
         if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol()&&OrderMagicNumber())  // в данной строчке проверяется наличие магика, а по идее должно быть так: OrderMagicNumber()==Mn
               int del=OrderDelete(OrderTicket());

            if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol()&&OrderMagicNumber())  // здесь тоже самое: OrderMagicNumber()==Mn
               del=OrderDelete(OrderTicket());
           }
      return(0);
     }
avatar

  13  verta81 Сообщений: 355

  • 27 июня 2021, 09:42
+
0
благодарю, я уже пробовал… ничего не меняется
это условие — &&OrderMagicNumber(), или &&OrderMagicNumber()==Mn вообще не играет роли… надо убрать его вообще
Редактирован: 27 июня 2021, 23:55
avatar

  2  LeonidPetr Автор Сообщений: 22

  • 27 июня 2021, 23:52
+
0
опишите стратегию, найдите поручителя и напишу советник с нуля
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 25 июня 2021, 23:05
+
0
А как у вас ищут поручителей?
Мне нужно что-то сделать, чтобы найти его?

Стратегия очень простая.
Через каждые полчаса открывается рыночный ордер (например BUY) lot=0.1 с ТП 5 пунктов и стопом 100 пунктов по значениям из стохастика, через 80 пунктов от цены открытия рыночного — отложенный ордер (SELLSTOP) Lot1=lot*6 в сторону StopLoss рыночного (алгоритм расчета есть) со стопом 70 пунктов и ТП равным 25 пунктов. В случае открытия отложенного (SELLSTOP) ордера выставляется отложенный(BUYSTOP) на 50пунков от цены открытия (SELLSTOP) с объемом Lot2=Lot1+3 в сторону StopLoss SELLSTOP.
При выполнения тэйк-профита — закрытие всех отложенных.
Стратегия простая, но я только на тестере любой пары добился решения. При совместной работе с другими парами возникает хаос.
Редактирован: 26 июня 2021, 00:26
avatar

  2  LeonidPetr Автор Сообщений: 22

  • 25 июня 2021, 23:55
+
0
А как у вас ищут поручителей?
Мне нужно что-то сделать, чтобы найти его?


попросить кого то с уровнем 3 и выше поручиться. сделать это можно в чате или написав в личку.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 26 июня 2021, 08:08
+
0
Выступаю поручителем. Если уважаемый автор уточнит ТЗ (добавит скрины например), будет вообще хорошо. Лично у меня возникают вопросы по " очень простой стратегии".
1-По каким значениям стохастика открывается первый ордер?
2-Объем Lot2 понятен только автору. «Lot2=Lot1+3» — плюс 3 чего?
3- Если все три последовательно открытых ордера уйдут в стоп...?
avatar

  18  GAWroch Сообщений: 84 - Вячеслав

  • 26 июня 2021, 10:04
+
0
1. if(Signal>Main&&Signal<70) — это условия открытия рыночного ордера
2. «Объем Lot2 понятен только автору. «Lot2=Lot1+3» — плюс 3 чего?» — Lot1=0.1*6...Lot2=0.6+0.1*3=0.9
3. Если уйдут все в стоп, тогда убыток будет зафиксирован в пределах 10%-15% от депозита. Это убыток, который в этом случае пока приходится принять.
avatar

  2  LeonidPetr Автор Сообщений: 22

  • 26 июня 2021, 11:25
+
0
на 1-е
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 27 июня 2021, 06:39
+
0
Благодарю
avatar

  2  LeonidPetr Автор Сообщений: 22

  • 27 июня 2021, 09:11
+
0
я советник упростил, сделал боле доступным для оптимизации, снизил риски, оптимизировал: www.opentraders.ru/downloads/3048/



этот вариант дальше можно править под ваши задачи.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 29 июня 2021, 22:21
+
0
Спасибо, Андрей!!!
Попробую привязать к своим расчетам.
Остался вопрос.
Какой код нужен, чтобы не открывалась куча ордеров после выставления отложенного ордера (например BUYSTOP) в момент срабатывания ранее выставленного отложенного (SELLSTOP)?
Сценарий:
1. Открытие рыночного Buy (к примеру)
2. Одновременно выставляется SELLSTOP (в разворот)
3. Срабатывает SELLSTOP и сразу выставляется BUYSTOP (в разворот)

Этот сценарий одинаков для всех пар. На тестере каждой пары все работает.
Запускаю на всех парах, до 3-го пункта сценария все Ок, как только доходит до 3-го пункта, начинаются выставляться отложенные на каждом тике.
Я попробую в твоей версии добавить, но, если есть готовое решение, а я полагаю, что это должно быть простое условие, то это сильно поможет мне закончить.
Заранее спасибо
Редактирован: 30 июня 2021, 00:38
avatar

  2  LeonidPetr Автор Сообщений: 22

  • 30 июня 2021, 00:34
+
0
вот открылись по сигналу бай и селстоп:



сработал селлстоп, выставился 3-й ордер байстоп:



www.opentraders.ru/downloads/3048/
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 30 июня 2021, 22:11
+
0
Большое спасибо… все работает правильно.
*uptrend* 
avatar

  2  LeonidPetr Автор Сообщений: 22

  • 1 июля 2021, 23:26

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