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

 
Yan Barmin:
Confundido. ¿Cómo puedo obtener el beneficio real (pérdida) de una orden abierta (no una orden pendiente) en MT4, incluyendo todas las comisiones, swaps, etc.? (OrderProfit() + OrderSwap() + OrderCommission() o sóloOrderProfit() o algo más? Me gustaría ganar algo después de cerrar el pedido.
 OrderProfit() + OrderSwap() + OrderCommission()
 

Cómo colocar estas figuras de volumen en las velas de la ventana del sótano, es decir, en la parte inferior o hacer que todas las figuras vayan todas como una línea una horizontal en el centro si el sótano no funciona. Estaría muy agradecido por la ayuda.

#propiedad ventana_del_gráfica_del_indicador

#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 4
#property indicator_width5 4

#property indicator_color1 SkyBlue
#property indicator_color2 Maroon
#property indicator_color3 Amarillo
#property indicator_color4 Azul
#property indicator_color5 DeepPink

extern int BarsToCount = 990;

extern string pus1 = "";
cadena externa p_s = "Configuración de puntos";
extern bool puntos_de_uso = true;
extern int punto_distancia = 5;
extern color color_point_u = Lime;
extern color color_point_d = DeepPink;
extern color color_point_s = Amarillo;
extern inttern tamaño_punto = 14;

extern string pus2 = "";
cadena externa s_w = "Camino";
extern bool use_show_same_way = true;
extern bool use_show_daily_way = true;

extern string pus3 = "";
cadena externa al = "Alertas";
extern bool use_alerts = false;
cadena externa up_alert = "Up";
extern string down_alert = "Down";


doble[];
doblemente hacia abajo[];
doble mid[];
doble up2[];
doble down2[];
doble ninguno[];

static int prevtime = 0;

//
int init()
{

IndicatorShortName("A");
return(0);
}

//
int deinit()
{
nombre_de_cadena;
for(int c=BarsToCount;c>=0;c--)
{
name_de="Vol_"+DoubleToStr(c,0);
if(ObjectFind(nombre_de)!=-1) ObjectDelete(nombre_de);
}
return(0);
}
//////////////////////////////////////////
int inicio()
{
////////////
up[0]=Valor_de_Empleo;
down[0]=EMPTY_VALUE;
mid[0]=EMPTY_VALUE;
if(Close[0]>Open[0]) up[0]=Volume[0];
if(Close[0]<Open[0]) down[0]=Volume[0];
if(Close[0]==Open[0]) mid[0]=Volume[0];

////////////////
if(puntos_de_uso)
Ob_cre(0);

if(!use_points)
Ob_del(0);
////////////
if(Time[0] == prevtime) return(0);
prevtime = Tiempo[0];
///////////////////////////
for(int c=BarsToCount;c>=1;c--)
{
////////////
if(puntos_de_uso)
Ob_cre(c);

if(!use_points)
Ob_del(c);
////////////
up[c]=Valor_de_Empleo;
down[c]=VALOR_EMPTY;
mid[c]=EMPTY_VALUE;
up2[c]=Valor_de_Empleo;
down2[c]=EMPTY_VALUE;

/////////////////
if(Close[c]>Open[c]) up[c]=Volumen[c];
if(Close[c]<Open[c]) down[c]=Volumen[c];
if(Close[c]==Open[c]) mid[c]=Volume[c];
none[c]=Volume[c]+Volume[c]/6;


//////////////
if(use_show_same_way)
{

if(Close[c]>Open[c] && Close[c+1]>Open[c+1])
{
up2[c]=Volume[c]; up2[c+1]=Volume[c+1];
up[c]=EMPTY_VALUE; up[c+1]=EMPTY_VALUE;
}

if(Close[c]<Open[c] && Close[c+1]<Open[c+1])
{
down2[c]=Volume[c]; down2[c+1]=Volume[c+1];
down[c]=VALOR_EMPTY; down[c+1]=VALOR_EMPTY;
}

}


if(use_alerts)
{
if(up2[1]!=EMPTY_VALUE && up2[4]==EMPTY_VALUE) Alert(up_alert);
if(down2[1]!=EMPTY_VALUE && down2[4]==EMPTY_VALUE) Alert(down_alert);
}
}
return(0);
}
//func
//+------------------------------------------------------------------+///////////////////////////////
void Ob_cre(int num_of_bar)
{
string name="Vol_"+DoubleToStr(num_of_bar,0);

color col_po;
if(Close[num_of_bar]>Open[num_of_bar]) col_po=color_point_u;
if(Close[num_of_bar]<Open[num_of_bar]) col_po=color_point_d;
if(Close[num_of_bar]==Open[num_of_bar]) col_po=color_point_s;

if(ObjectFind(name)==-1)
{
ObjectCreate(nombre,OBJ_TEXT,0,0)
}
ObjectSet(name,OBJPROP_TIME1,Time[num_of_bar]);
ObjectSet(nombre,OBJPROP_PRICE1,Alto[número_de_barra]+punto_distancia*Punto);
ObjectSet(nombre,OBJPROP_ANGLE,90);
ObjectSetText(name,DoubleToStr(Volume[num_of_bar],0),size_point, "Arrial",col_po);
ObjectSet(nombre,OBJPROP_ANCHOR,ANCHOR_CENTER);
}

//
void Ob_del(int num_of_bar)
{
string name="Vol_"+DoubleToStr(num_of_bar,0);
}

Archivos adjuntos:
 

Creo un símbolo sintético basado en el EURUSD, de nombre ZIGZAG (para evitar el conflicto de nombres)

Importo las barras de minutos, todo se importa con éxito, pero al volver a solicitarlo el número de barras es 0. Hay un archivo creado "2019.hcc" de 39 mb en la carpeta "history/symbol", en la carpeta "ticks" todo está vacío. Cambiado el terminal (versión actual desde el 30 de mayo de 2019), ordenador - en todas partes no funciona.

¿Cuál puede ser el error?

Archivos adjuntos:
simvol.zip  809 kb
 
SEM:

Creo un símbolo sintético basado en el EURUSD, de nombre ZIGZAG (para evitar el conflicto de nombres)

Importo las barras de minutos, todo se importa con éxito, pero al volver a solicitarlo el número de barras es 0. Hay un archivo creado "2019.hcc" de 39 mb en la carpeta "history/symbol", en la carpeta "ticks" todo está vacío. Cambiado el terminal (versión actual de 30 de mayo de 2019), ordenador - en todas partes no funciona.

¿Cuál puede ser el error?

En los nombres coincidentes
 
Hola a todos, ¿qué tal si mejoramos el artículo de MT4 Balance en la versión demo y lo hacemos modificable? Cuál sería la posibilidad de cambiar el saldo de la demo a su discreción. O bien recargar. ¿O retirar la demo y hacer que el comercio en la demo sea lo más parecido al real?
 
oleqas1:
Hola, ¿te gustaría mejorar el artículo MT4 Balance en la versión Demo y hacerlo editable? ¿Cuál sería la posibilidad de equilibrio de demostración por su cuenta para cambiar. O bien recargar. ¿O retirar los fondos de la demo y hacer que el comercio en la demo sea lo más parecido al real?

MetaTrader4 ya no se actualizará: el desarrollo de esta plataforma se detuvo hace tiempo. A lo sumo, se están corrigiendo fallos importantes.

Ir a MetaTrader5 y utilizar TesterWithdrawal()

Документация по MQL5: Общие функции / TesterWithdrawal
Документация по MQL5: Общие функции / TesterWithdrawal
  • www.mql5.com
Общие функции / TesterWithdrawal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Hola, ¿Cómo puedo calcular la volatilidad de las sesiones europeas durante 3 días?
 

Hola, si hay por ejemplo un buystop y buylimit.

Se abre un buystop, se modifica el buylimit y se establece un nuevo buystop.

Abre buylimit necesita modificar buystop y establecer un nuevo buylimit.

He intentado hacerlo, se abre, pero los mensajes de error OrderModify error 1, OrderModify error 130. No sé cómo solucionarlo. Por favor, ayúdame.


void OnTick()
  {
      price_buystop = NormalizeDouble(Ask+StopLoss*Point,Digits);
      price_buyLimit = NormalizeDouble(price_buystop-StopLoss*2*Point,Digits);
      price_buy = PriceOpenLastPos();
      
      //для байстоп
        if (BuyStopCount()==0)//если нет байстопа
       { 
       TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
       SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);  
       if(CountBuy()==0)// и нет открытых бай 
       {    
       int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP,"buystop",Magic,0,Blue);       
       if (ticket <0) Print ("Не удалось открыть buystop ");
       }
         if (CountBuy()>=1) // если нет байстоп но есть открытая
         {  
        price_buystop = NormalizeDouble(price_buy + StopLoss*Point,Digits);
        int ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP,"buystop",Magic,0,Blue);       
        if (ticket <0) Print ("Не удалось открыть buystop ");            
         } 
      } else {   //если есть байстоп модифицируем
      if (CountBuy()>=1)//и есть открытые и байстоп
         {        
         price_buystop = NormalizeDouble(price_buy+StopLoss*Point,Digits);
         TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
         SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);        
         bool res = OrderModify(OrderTicket(),price_buystop,SL,TP,0,Blue);     
         }   
      }
      
   //для байлимит
        if (BuyLimitCount()==0) // если нет байлимит
       {   
       TP= NormalizeDouble(price_buyLimit + TakeProfit*Point,Digits);
       SL= NormalizeDouble(price_buyLimit - StopLoss*Point,Digits); 
        if(CountBuy()==0)// и нет открытых открываем
        {
         int ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP,"BuyLimit",Magic,0,Blue);       
         if (ticket <0) Print ("Не удалось открыть BuyLimit ");   
        }
        if (CountBuy()>=1)// если открытая есть
         {         
        price_buyLimit = NormalizeDouble(price_buy - StopLoss*Point,Digits);       
        int ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP,"BuyLimit",Magic,0,Blue);         
        if (ticket <0) Print ("Не удалось открыть BuyLimit ");            
         }           
      }  else { // если есть байлимит и есть открытая
       if (CountBuy()>=1)
         {
         price_buyLimit = NormalizeDouble(price_buy-StopLoss*Point,Digits);         
         TP= NormalizeDouble(price_buyLimit + TakeProfit*Point,Digits);
         SL= NormalizeDouble(price_buyLimit - StopLoss*Point,Digits);        
         bool res = OrderModify(OrderTicket(),price_buyLimit,SL,TP,0,Blue);    
         }   
      }
   
  }
//+------------------------------------------------------------------+
// проверяем есть ли байстоп ордера с конца
  int BuyStopCount()
  {
  int count = 0;
  for (int i=OrdersTotal()-1;i>=0;i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES) == true && 
        OrderMagicNumber()== Magic && OrderType() == OP_BUYSTOP )                        
        {
        count ++;
        }
    }
    return(count); 
  }
  
  // проверяем есть ли ,байлимит ордера с конца
  int BuyLimitCount()
  {
  int count = 0;
  for (int i=OrdersTotal()-1;i>=0;i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber()== Magic &&                        
        OrderType() == OP_BUYLIMIT )                       
        {
        count ++;
        }
    }
    return(count);      
  }
  
   //проверяем открытые ордера покупку
  int CountBuy()
  {
  int count = 0;
  for (int trade = OrdersTotal()-1; trade>=0; trade --)
  {
    if (OrderSelect (trade, SELECT_BY_POS, MODE_TRADES) ==true)
    {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
        count++;
    }
   }return(count);
  }
  
  
  // возвращает цену открытия последней открытой позиции
  
  double PriceOpenLastPos()
{
int k=OrdersTotal();
double r =0;
int i;

for (i=0; i<k; i++)
  {
  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   {
    if (OrderSymbol()== Symbol() && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
     r=OrderOpenPrice();
   }
}return (r);
}


 

¿A qué se asocian estos errores al probar un EA en el probador de estrategias en MT4?


 
Alexandr Sokolov:

¿A qué se asocian estos errores al probar un EA en el probador de estrategias en MT4?


Historial de carga. F2.