Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1828

 

Olá!

Decidiu tornar as corujas um pouco mais complicadas.

Eu quero fazer algo como seguir em frente, mas com uma única / dupla ação

idéia:

o preço passou de 75% para tomar - parar diminuiu (por exemplo) em 20 pips e tomar aumentou em 20 pips.

o preço passou de 90% para tomar - o stop diminuiu (por exemplo) em 30p e o take aumentou em 10p.

Eu vejo o esquema assim (.....function...)=> (TP - Mparametr)

onde: TP - TakeProfit

Mparametr- definido em variáveis EA externas (por exemplo, número de pontos)

Que funções devem ser usadas para resolver este problema?

Eu li sobre as variáveis pré-definidas de licitação, pergunte - devemos usá-las como base?

ou devemos usar MarketInfo ou SymbolInfoTick?

Tenho uma solução semelhante, mas seu turno de parada e tomada depende de lotes:

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

Eu quero fazer algo semelhante. relativamente simples.


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

Ou como este

Estou escrevendo este quadro há quase uma semana e aqui está o problema: se eu também colocar o nivelador mais pendente para fechar no botão por analogia com a abordagem, que foi um ponto abaixo quando o preço chegou, então por alguma razão sem pedir o fechamento imediato, sem pressionar o botão, o que deve fazê-lo um ponto acima (depois de pressionar e atingir um nível como em teoria você precisa)


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

  }

me ajude

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

De qualquer forma, estou escrevendo este quadro há quase uma semana e aqui está o problema - se eu também definir o nível mais pendente para algum tipo de botão de fechamento analógico na abordagem, que foi um ponto abaixo quando o preço é atingido, por alguma razão sem pedir que feche imediatamente sem pressionar o botão, que deve fazê-lo um ponto acima (depois de pressionar e ao atingir um nível como em teoria você precisa)


me ajude


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

Olá!

Decidiu tornar as corujas um pouco mais complicadas.

Eu quero fazer algo como seguir em frente, mas com uma única / dupla ação

idéia:

o preço passou de 75% para tomar - parar diminuiu (por exemplo) em 20 pips e tomar aumentou em 20 pips.

O preço passou de 90% para o take- stop diminuiu (por exemplo) em 30 pips e o take aumentou em 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 #:

Obrigado, é interessante. Vou tentar descobrir!

Acontece quese(Licitação é o parâmetro de preço atual - que não é chamado de forma alguma - você pode simplesmente comparar certos valores com ele?

e a unidade deBid é ticks? (não é expresso em dinheiro)

 
Tretyakov Rostyslav #:


Tenho apenas uma pequena preocupação. Todas as ordens estão fechando de vez em quando (ou seja, todas e sempre!), mas às vezes, se eu abrir 3-4 ordens, apenas 2 ou 1 delas podem fechar. Eu tenho um i-check especial para isto, você pode me dar uma dica?

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

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

Obrigado, é interessante. Vou tentar descobrir!

Acontece quese(Licitação é o parâmetro de preço atual - que não é chamado de forma alguma - você pode simplesmente comparar certos valores com ele?

e a unidade deBid é ticks? (não é expresso em dinheiro)

A licitação é preço atual por isso, compare com o preço de abertura +/- condição

Quanto a carrapatos, nem Bid nem Ask é medido em carrapatos. Os carrapatos são a chegada de um novo preço.

 
Tretyakov Rostyslav #:

A licitação é preço atual então temos que compará-lo com o preço de abertura +/- condição

Quanto a carrapatos, nem Bid nem Ask é medido em carrapatos. Os carrapatos são a chegada de um novo preço.

Estou vendo. Então em que é medido? pips/pips?

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

Como é medido então? em pontos/pontos?

MarketInfo(_Symbol,MODE_TICKSIZE);
 
Tretyakov Rostyslav #:

Estou vendo. Obrigado.