Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 629

 
¿Quién más puede ayudar?)
 
Rustam Bikbulatov:
¿Quién más puede ayudar?)

Parece que te han dado respuestas y ejemplos completos, pero todavía necesitas leer la ayuda para entender cómo se llaman las funciones y por qué se usa el modificador static.

Esta es otra forma, tal vez sea más fácil de entender para ti:

int N(bool reset=false) // если вызываем N() то возвращает следующее значение n++, при первом вызове n=0, но вернет 1, т.к. n=0, а затем n++, если нужно 0 то 
			// или  static int n=-1; или вызывайте сначала N(true)
  {                     // если вызываем N(true), то сбрасываем n=0 и возвращзаем 0
   static int n=0;
   if(reset) n=0; else n++;
   return n;
  }
 
Igor Makanu:

Parece que te han dado respuestas y ejemplos completos, pero todavía necesitas leer la ayuda para entender cómo se llaman las funciones y por qué se usa el modificador static.

Aquí hay otra variante, tal vez esto le haga más fácil de entender:

El primer ejemplo muestra una llamada a la función cuando no se toma ninguna posición y se compara el resultado devuelto.

if( ((OpenB-Ask)/ma+TimeB/60) > N() )

Por eso puede ser una buena idea hacer una devolución simple sin poner a cero y sumar. Que he implementado en 2 variantes

 
//+------------------------------------------------------------------+
//|                                                 elliotbutton.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  ButtonCreate();
  ButtonCreate(0,"ButtonMinor",0,10,60,50,50,CORNER_LEFT_UPPER,"(i)","Arial",12,clrBlack, C'236,233,216',clrNONE,false,false,false,false,0);
  
  
     return(INIT_SUCCEEDED);
  }

void OnTick()
  {
  }

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
         if (ObjectGetInteger(0,"Button",OBJPROP_STATE,0)==true) 
          {
               int      x     =(int)lparam;
               int      y     =(int)dparam;
               datetime dt    =0;
               double   price =0;
               int      window=0;
                        if(ChartXYToTimePrice(0,x,y,window,dt,price))  
                         {
                         PrintFormat("Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G",window,x,y,TimeToString(dt),price);
                                 if(ChartTimePriceToXY(0,window,dt,price,x,y))
                                     PrintFormat("Time=%s  Price=%G  =>  X=%d  Y=%d",TimeToString(dt),price,x,y);
                                 ChartRedraw(0);
                         }
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"i","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
            
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"ii","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
          
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"iii","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
           
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"iv","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
             
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"v","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
               
               ObjectSetInteger(0,"Button",OBJPROP_STATE,False);
             }
                        
               
          if (ObjectGetInteger(0,"ButtonMinor",OBJPROP_STATE,0)==true) 
          {
               int      x     =(int)lparam;
               int      y     =(int)dparam;
               datetime dt    =0;
               double   price =0;
               int      window=0;
                        if(ChartXYToTimePrice(0,x,y,window,dt,price))  
                         {
                         PrintFormat("Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G",window,x,y,TimeToString(dt),price);
                                 if(ChartTimePriceToXY(0,window,dt,price,x,y))
                                     PrintFormat("Time=%s  Price=%G  =>  X=%d  Y=%d",TimeToString(dt),price,x,y);
                                 ChartRedraw(0);
                         }
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(i)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
            
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(ii)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
          
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(iii)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
           
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(iv)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
             
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(v)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
               
               ObjectSetInteger(0,"ButtonMinor",OBJPROP_STATE,False);
               
            
           }
 }
            
  
  

void OnDeinit(const int reason)
  {
   ObjectDelete(0,"Button");
   ObjectDelete(0,"ButtonMinor");
  }
  
bool ButtonCreate(const long              chart_ID=0,               // ID графика 
                  const string            name="Button",            // имя кнопки 
                  const int               sub_window=0,             // номер подокна 
                  const int               x=10,                      // координата по оси X 
                  const int               y=10,                      // координата по оси Y 
                  const int               width=50,                 // ширина кнопки 
                  const int               height=50,                // высота кнопки 
                  const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки 
                  const string            text="i",                 // текст 
                  const string            font="Arial",             // шрифт 
                  const int               font_size=10,             // размер шрифта 
                  const color             clr=clrBlack,             // цвет текста 
                  const color             back_clr=C'236,233,216',  // цвет фона 
                  const color             border_clr=clrNONE,       // цвет границы 
                  const bool              state=false,              // нажата/отжата 
                  const bool              back=false,               // на заднем плане 
                  const bool              selection=false,          // выделить для перемещений 
                  const bool              hidden=false,              // скрыт в списке объектов 
                  const long              z_order=0)                // приоритет на нажатие мышью 
  { 

   ResetLastError(); 

   if(ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) 
     { 
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); 
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); 
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
   ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
      }
  return(true); 
 }
 
 bool TextCreate(const long              chart_ID=0,              // ID графика 
                const string            name="Text",              // имя объекта 
                const int               sub_window=0,             // номер подокна 
                datetime                time=0,                   // время точки привязки 
                double                  price=0,                  // цена точки привязки 
                const string            text="Text",              // сам текст 
                const string            font="Arial",             // шрифт 
                const int               font_size=10,             // размер шрифта 
                const color             clr=clrBlack,             // цвет 
                const double            angle=0.0,                // наклон текста 
                const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки 
                const bool              back=false,               // на заднем плане 
                const bool              selection=true,           // выделить для перемещений 
                const bool              hidden=true,              // скрыт в списке объектов 
                const long              z_order=0)                // приоритет на нажатие мышью 
  { 

   ResetLastError(); 

   if(ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) 
     { 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); 
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
     }
   return(true); 
 } 



  
  

escribir un EA que al hacer clic en el Botón, cree un Texto en el lugar del gráfico, tal como lo muestra el ratón. Ahora mi Asesor Experto crea Texto sólo en lugar de Botón.

 

Hola, ¿cómo hago para que cuando arrastre manualmente una orden pendiente de buystop, la otra orden pendiente de sellstop se mueva con ella?

¿Cómo puedo vincular uno a otro, de modo que cuando mueva uno, se muevan los dos a la vez?

 


Здравствуйте. У меня алгоритм такой 
//----------------------------------------------------------------------------
if (CountBuy() == 0)
{

BuySignal = h1; tttp=1; 
if (BuySignal > 0 && tttp==1 && h2>0)
{
CloseSell();
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue);

if (ticket > 0)
{

if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{

SL = NormalizeDouble(Ask-StopLoss*Point, Digits);

TP = NormalizeDouble(Ask+TakeProfit*Point, Digits);

res = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0);
if (!res)

Print("Ошибка модификации ордера на покупку, ASK=" + DoubleToStr(Ask) + ", SL=" + DoubleToStr(SL) + ", TP=" + DoubleToStr(TP)); 
}
}
}
}
if (CountSell() == 0)
{
SellSignal= l1; tttp=-1;
if (SellSignal > 0 && tttp==-1 && l2>0)
{
CloseBuy();
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
SL = NormalizeDouble(Bid+StopLoss*Point, Digits);
TP = NormalizeDouble(Bid-TakeProfit*Point, Digits);
res = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0);
if (!res)
Print("Ошибка модификации ордера на продажу, BID=" + DoubleToStr(Bid) + ", SL=" + DoubleToStr(SL) + ", TP=" + DoubleToStr(TP)); 
}
}
}
}
} 
//------------------------------------------------------------------------------------------
Пытаюсь сделать, чтоб условия на открытие ордера проверялось бы через какое-то кол-во баров, а так сразу открывается другой ордер
 
Carcass77:

¿Por qué el spam?

 
Konstantin Nikitin:

¿Por qué el spam?

¿Lo que has escrito en varios hilos? Puedo quitarlo.
 
Ihor Herasko:

Escribe tus propios ticks y ponlos en el probador de estrategias.

Saludos. ¿Puede decirme cuál es el problema y cómo solucionarlo?

He cambiado algunos candelabros en la historia para hacer pruebas, para la 1ª, 2ª, 3ª y 6ª.

Al hacer la prueba, se procesa la segunda, se dibuja la tercera (sin procesar), y se detiene dando un error de parada por Stop Out



 

Buenas tardes

Tengo una situación muy sencilla pero me cuesta resolverla.

Por favor, dígame qué estoy haciendo mal:

problema: no puedo vincular el indicador personalizado(i-DRP...) al Asesor Experto (DR Test) a través de iCustom

gracias de antemano

Archivos adjuntos:
Razón de la queja: