Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1829

 
SanAlex #:

nel vostro codice - ecco dove prendere i numeri

nell'indicatore di segnale - che ha un avviso. qui per avere più segnali - rimuovere un paio di linee


Grazie!
 

Ciao!

Ho deciso di fare dei gufi un po' più complicati.

Voglio fare qualcosa come il trailing, ma con una singola / doppia azione

idea:

prezzo passato al 75% per prendere - stop diminuito (per esempio) di 20 pip e presa aumentata di 20 pip.

prezzo passato al 90% per prendere - stop diminuito (per esempio) di 30p e presa aumentata di 10p.

Vedo lo schema in questo modo (.....function...)=> (TP - Mparametr)

dove: TP - TakeProfit

Mparametr- impostato in variabili EA esterne (ad esempio il numero di punti)

Quali funzioni dovrebbero essere utilizzate per risolvere questo problema?

Ho letto delle variabili predefinite bid, ask - dovremmo usarle come base?

o dovremmo usare MarketInfo o SymbolInfoTick?

Ho una soluzione simile, ma il suo turno di stop and take dipende da molti:

  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);
             }

Voglio fare qualcosa di simile. relativamente semplice.


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

O come questo

Sto scrivendo questa scheda da quasi una settimana ed ecco il problema: se imposto anche la livellatrice pendente per chiudere sul pulsante per analogia con l'approccio, che era un punto sotto quando il prezzo è stato raggiunto, allora per qualche motivo si chiude automaticamente senza chiedere, senza premere il pulsante, che dovrebbe farlo un punto sopra (dopo aver premuto e dopo aver raggiunto un livello come in teoria si dovrebbe)


//+------------------------------------------------------------------+
//| 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");
              }
           }

  }

Aiutami

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

Comunque, sto scrivendo questa scheda da quasi una settimana ed ecco il problema - se imposto anche il livello più pendente a una specie di pulsante di chiusura analogico sull'approccio, che era un punto sotto quando il prezzo viene raggiunto, per qualche motivo senza chiedere si chiude immediatamente senza premere il pulsante, che dovrebbe farlo un punto sopra (dopo aver premuto e al raggiungimento di un livello come in teoria è necessario)


Aiutami


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

Ciao!

Ho deciso di fare dei gufi un po' più complicati.

Voglio fare qualcosa come il trailing, ma con una singola / doppia azione

idea:

prezzo passato al 75% per prendere - stop diminuito (per esempio) di 20 pip e presa aumentata di 20 pip.

il prezzo è passato dal 90% al take- stop diminuito (per esempio) di 30 pip e take aumentato di 10 pip.


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 #:

Grazie, è interessante, cercherò di capirlo!

si scopre chese(Bid è il parametro del prezzo corrente - che non viene chiamato in alcun modo - si possono semplicemente confrontare certi valori con esso?

e l'unità diBid è il tick? (non è espresso in denaro)

 
Tretyakov Rostyslav #:


Ho solo una piccola cosa di cui preoccuparmi. Tutti gli ordini si chiudono ogni tanto (cioè tutti e sempre!), ma a volte, se apro 3-4 ordini, solo 2 o 1 di essi possono chiudersi. Ho un i-check speciale per questo, puoi darmi un suggerimento.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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");
              }
           }

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

Grazie, è interessante, cercherò di capirlo!

si scopre chese(Bid è il parametro del prezzo corrente - che non viene chiamato in alcun modo - si possono semplicemente confrontare certi valori con esso?

e l'unità diBid è il tick? (non è espresso in denaro)

L'offerta è prezzo corrente quindi confrontare con il prezzo di apertura +/- condizione

Per quanto riguarda i tick, né il Bid né l'Ask sono misurati in tick. I ticchettii sono l'arrivo di un nuovo prezzo.

 
Tretyakov Rostyslav #:

L'offerta è prezzo corrente quindi dobbiamo confrontarlo con il prezzo di apertura +/- condizione

Per quanto riguarda i tick, né il Bid né l'Ask sono misurati in tick. I ticchettii sono l'arrivo di un nuovo prezzo.

Capisco. Allora in cosa si misura? pip/pips?

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

Capisco. Come si misura allora, in punti/pips?

MarketInfo(_Symbol,MODE_TICKSIZE);