Ваши вопросы по языку MQL4

MakarFX

Элитный участник
У Вас не правильные стопы!
У покупок стоп снизу, у продаж сверху, а у Вас для всех одинаково
 

star603

Новичок форума
У Вас не правильные стопы!
У покупок стоп снизу, у продаж сверху, а у Вас для всех одинаково
Код:
double Stop(int magik)
  {
   double sl =0.0;
   switch(stop)
     {
      case 0://не меняем
         Comment("No change");
         break;
      case 1://Минимальные
         for(int y=0; y<= OrdersTotal()-1; y++)
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==magik && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                  case 1:
                     sl= NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                 }
              }
         break;
      case 2://Фиксиров
         for(int y=0; y<= OrdersTotal()-1; y++)
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==magik && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     sl = NormalizeDouble(Bid-StopLoss*Point,Digits);
                     break;
                  case 1:
                     sl= NormalizeDouble(Ask+StopLoss*Point,Digits);
                     break;
                 }
              }
         break;
                 }
              }
     }
   return(sl);
  }

Вроде все правильно
 

star603

Новичок форума
OrderSelect выбирает ордер который уже есть.
После открытия первого ордера OrderSelect выберет его и даст Вам Стоп/Тейк для выбранного типа ордера, а Вам для второго ордера нужен противоположный тип
Для этого жесть case у второго будет позия 2 и ордер тайп определяет тип его
 

MakarFX

Элитный участник
подскажите пожалуйста

C-подобный:
//+------------------------------------------------------------------+
if(f_IsNewBar()==true)
  {
   if(Open[1]-Close[1]>0 && Open[2]-Close[2]>0 && Open[3]-Close[3]>0)
     {
      ticket1 = OrderSend(_Symbol,OP_BUY,UstLot(),Ask,Slippage,Stop(0),Prof(0),NULL,Magic,clrAqua);
      ticket2 = OrderSend(_Symbol,OP_SELL,UstLot(),Bid,Slippage,Stop(1),Prof(1),NULL,Magic,clrAqua);
     }
  }
//+------------------------------------------------------------------+
double Stop(int order_type=-1)
  {
   double sl =0.0;
   if(order_type==0) sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   if(order_type==1) sl = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   return(sl);
  }
//+------------------------------------------------------------------+
Аналогично сделайте для Prof(
 

star603

Новичок форума
C-подобный:
//+------------------------------------------------------------------+
if(f_IsNewBar()==true)
  {
   if(Open[1]-Close[1]>0 && Open[2]-Close[2]>0 && Open[3]-Close[3]>0)
     {
      ticket1 = OrderSend(_Symbol,OP_BUY,UstLot(),Ask,Slippage,Stop(0),Prof(0),NULL,Magic,clrAqua);
      ticket2 = OrderSend(_Symbol,OP_SELL,UstLot(),Bid,Slippage,Stop(1),Prof(1),NULL,Magic,clrAqua);
     }
  }
//+------------------------------------------------------------------+
double Stop(int order_type=-1)
  {
   double sl =0.0;
   if(order_type==0) sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   if(order_type==1) sl = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
   return(sl);
  }
//+------------------------------------------------------------------+
Аналогично сделайте для Prof(
спасибо
 
Верх