Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1829

 
SanAlex #:

dans votre code - voici où récupérer les chiffres

dans l'indicateur de signal - qui a une alerte . ici pour avoir plus de signaux - supprimer quelques lignes


Merci !
 

Bonjour !

J'ai décidé de faire des hiboux un peu plus compliqués.

Je veux faire quelque chose comme le traçage, mais avec une action simple / double.

idée :

le prix est passé de 75% à la prise - le stop a diminué (par exemple) de 20 pips et la prise a augmenté de 20 pips.

le prix est passé de 90% à la prise - l'arrêt a diminué (par exemple) de 30p et la prise a augmenté de 10p.

Je vois le schéma comme suit (.....function...)=> (TP - Mparametr)

où : TP - TakeProfit

Mparametr- défini dans les variables externes de l'EA (par exemple, le nombre de points)

Quelles fonctions doivent être utilisées pour résoudre ce problème ?

J'ai lu des informations sur les variables prédéfinies bid,ask - devons-nous les utiliser comme base ?

ou devons-nous utiliser MarketInfo ou SymbolInfoTick ?

J'ai une solution similaire, mais son décalage d'arrêt et de prise dépend de beaucoup de choses :

  if((iOTy == OP_BUY)&& (LOT()>LotControl))
             {
              dSL = NormalizeDouble(dOOP - StopLoss * Point+DownLoss * Point, Digits);
              dTP = NormalizeDouble(dOOP + TakeProfit * Point+DownProfit * Point, Digits);

              bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
             }

Je veux faire quelque chose de similaire. relativement simple.


MarketInfo - Получение рыночной информации - Справочник MQL4
MarketInfo - Получение рыночной информации - Справочник MQL4
  • docs.mql4.com
MarketInfo - Получение рыночной информации - Справочник MQL4
 
Tretyakov Rostyslav #:

Ou comme ceci

J'écris ce tableau depuis presque une semaine et voici le problème : si je configure également le niveleur en attente pour qu'il se ferme sur le bouton par analogie avec l'approche, qui était un point en dessous lorsque le prix a été atteint, alors pour une raison quelconque, il se ferme automatiquement sans demander, sans appuyer sur le bouton, qui devrait le faire un point au-dessus (après avoir appuyé et après avoir atteint un niveau comme en théorie vous devriez le faire)


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  

  
  
  
//--- 
     ObjectCreate(0,"Button_1",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Button_1",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Button_1",OBJPROP_YDISTANCE,120);
   ObjectSetInteger(0,"Button_1",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"Button_1",OBJPROP_YSIZE,20);
   ObjectCreate(0,"Label_1",OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,"Label_1",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Label_1",OBJPROP_YDISTANCE,40);
   ObjectSetInteger(0,"Label_1",OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetString(0,"Label_1",OBJPROP_TEXT,"Price");
   ObjectSetInteger(0,"Label_1",OBJPROP_COLOR,clrBlack);
   
   
   //--- CLOSE BUY +1
   ObjectCreate(0,"Button_21",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Button_21",OBJPROP_XDISTANCE,240);
   ObjectSetInteger(0,"Button_21",OBJPROP_YDISTANCE,120);
   ObjectSetInteger(0,"Button_21",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"Button_21",OBJPROP_YSIZE,20);
   ObjectSetString(0,"Button_21",OBJPROP_TEXT,"CLOSE BUY +1");
   ObjectSetInteger(0,"Button_21",OBJPROP_BGCOLOR,Beige);
   ObjectSetInteger(0,"Button_21",OBJPROP_COLOR,Green);
   ObjectCreate(0,"Label_21",OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,"Label_21",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Label_21",OBJPROP_YDISTANCE,40);
   ObjectSetInteger(0,"Label_21",OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,"Label_21",OBJPROP_COLOR,clrBlack);
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   if(sparam=="Button_1")
     {
      ObjectSetString(0,"Label_1",OBJPROP_TEXT,DoubleToString(Ask-1*_Point,Digits));
      Comment("цена на момент нажатия кнопки: "+Ask, " ждем цены для входа: "+(Ask-1*_Point));
     }
     
        if(sparam=="Button_21")
     {

      ObjectSetString(0,"Label_21",OBJPROP_TEXT,DoubleToString(Bid+1*_Point,Digits));
      ObjectSetText("MSG","цена Bid в момент нажатия кнопки: "+ DoubleToString(Bid,Digits),8,"Verdana", White);
      ObjectSetText("MSG2","ждем цены Bid для закрытия: "+ DoubleToString(Bid+1*_Point,Digits),8,"Verdana", White);

     }
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int ticket;
   double price=StringToDouble(ObjectGetString(0,"Label_1",OBJPROP_TEXT));
   if(Ask<=price)
     {
      ticket = OrderSend(_Symbol,OP_BUY,0.01,Ask,0,0,0,NULL,0,0,clrGreen);
      ObjectSetString(0,"Label_1",OBJPROP_TEXT,DoubleToString(DBL_MAX,Digits));
      ObjectSetInteger(0,"Button_1",OBJPROP_STATE,false);
      Comment("цена ожидания была: "+price, " зашли по: "+Ask, " TakeProfit на: "+(Ask+4*_Point));
     }
     
     
     
       //-----close buy +1

   double priceclosebuyplus1=StringToDouble(ObjectGetString(0,"Label_21",OBJPROP_TEXT));
   if(Bid>=priceclosebuyplus1)
     {

      
      ObjectSetString(0,"Label_21",OBJPROP_TEXT,DoubleToString(DBL_MAX,Digits));
      ObjectSetInteger(0,"Button_21",OBJPROP_STATE,false);
      ObjectSetText("MSG","ожидали цену закрытия Bid: "+DoubleToString(priceclosebuyplus1,Digits),8,"Verdana", White);
      ObjectSetText("MSG2","закрыли по цене Bid: "+ DoubleToString(Bid,Digits),8,"Verdana", White);
      CloseBuyPositions1();
     }
     
     
     
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))



         if(OrderType()==OP_BUY)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL))
              {
               Print("Order Close");
              }
           }

  }

aidez-moi

 
Порт-моне тв #:

Quoi qu'il en soit, j'ai écrit ce tableau pendant près d'une semaine et voici le problème - si j'ai également défini le niveau le plus en suspens à une sorte d'analogie de bouton de fermeture sur l'approche, qui était un point en dessous lorsque le prix est atteint, pour une raison quelconque sans demander il ferme immédiatement sans appuyer sur le bouton, qui devrait le faire un point au-dessus (après avoir appuyé et sur l'atteinte d'un niveau comme en théorie vous avez besoin)


aidez-moi


if(Bid>=priceclosebuyplus1&&priceclosebuyplus1>0)
 
законопослушный гражданин #:

Bonjour !

J'ai décidé de faire des hiboux un peu plus compliqués.

Je veux faire quelque chose comme le traçage, mais avec une action simple / double.

idée :

le prix est passé de 75% à la prise - le stop a diminué (par exemple) de 20 pips et la prise a augmenté de 20 pips.

le prix est passé de 90% à la prise - le stop a diminué (par exemple) de 30 pips et la prise a augmenté de 10 pips.


int TakeProfit=200;
int StopLoss  =100;
//+----------------------------------------------------------------------------+
void TrailingOrders()
  {
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.75*_Point) && OrderStopLoss()<OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+20*_Point, OrderTakeProfit()+20*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.9*_Point) && OrderStopLoss()>=OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+30*_Point, OrderTakeProfit()+10*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
              }
           }
        }
     }
  }
 
Tretyakov Rostyslav #:

Merci. C'est intéressant. Je vais essayer de comprendre !

il s'avère quesi(Bid est le paramètre du prix actuel - qui n'est en aucun cas appelé - vous pouvez simplement comparer certaines valeurs avec lui ?

et l'unité deBid est le ticks ? (elle n'est pas exprimée en argent)

 
Tretyakov Rostyslav #:


Je n'ai qu'un seul petit souci : toutes les commandes se ferment de temps en temps (c'est-à-dire toutes et toujours !), mais parfois, si j'ouvre 3-4 commandes, seules 2 ou 1 d'entre elles se ferment. J'ai un i-check spécial pour cela, pouvez-vous me donner un indice.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))



         if(OrderType()==OP_BUY)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Bid, 0, NULL))
              {
               Print("Order Close");
              }
           }

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSellPositions2()
  {

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))



         if(OrderType()==OP_SELL)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Ask, 0, NULL))
              {
               Print("Order Close");
              }
           }

  }
//+------------------------------------------------------------------+
 
законопослушный гражданин #:

Merci. C'est intéressant. Je vais essayer de comprendre !

il s'avère quesi(Bid est le paramètre du prix actuel - qui n'est en aucun cas appelé - vous pouvez simplement comparer certaines valeurs avec lui ?

et l'unité deBid est le ticks ? (elle n'est pas exprimée en argent)

L'offre est prix actuel donc comparer avec le prix d'ouverture +/- condition

Quant aux ticks, ni le Bid ni le Ask ne sont mesurés en ticks. Les ticks correspondent à l'arrivée d'un nouveau prix.

 
Tretyakov Rostyslav #:

L'offre est prix actuel il faut donc le comparer avec le prix d'ouverture +/- condition

Quant aux ticks, ni le Bid ni le Ask ne sont mesurés en ticks. Les ticks correspondent à l'arrivée d'un nouveau prix.

Je vois. Alors comment se mesure-t-il ? en pips/pips ?

 
законопослушный гражданин #:

Je vois. Comment se mesure-t-il alors ? en points/pips ?

MarketInfo(_Symbol,MODE_TICKSIZE);