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

 
Yan Barmin:
Confuso. Como obter o lucro real (perda) de uma ordem em aberto (não uma ordem pendente) no MT4, incluindo todas as comissões, swaps, etc.? (OrderProfit() + OrderSwap() + OrderComission() ou apenasOrderProfit() ou algo mais? Eu gostaria de ganhar algo depois que o pedido for fechado.
 OrderProfit() + OrderSwap() + OrderCommission()
 

Como colocar estas figuras de volume sobre as velas na janela do porão, ou seja, na parte inferior ou fazer com que todas as figuras se movam todas como uma linha horizontal no centro, se o porão não funcionar. Ficaria muito grato pela ajuda.

#janela_do_cartão_indicador de propriedade

#largura_do_indicador de propriedade1 2
#largura_do_indicador de propriedade2 2
#largura_do_indicador de propriedade3 2
#largura_do_indicador de propriedade4 4
#largura_do_indicador de propriedade5 4

#indicador de propriedade_color1 SkyBlue
#indicador de propriedade_color2 Maroon
#indicador de propriedade_color3 Amarelo
#indicador de propriedade_color4 Azul
#indicador de propriedade_color5 DeepPink

BarsToCount = 990;

pus1 = "";
string externa p_s = "Configurações de pontos";
pontos_de_utilização de bool externo = verdadeiro;
ponto_de_distância int exterior = 5;
color_point_u_côr exterior = Cal;
color_point_d = DeepPink;
color_point_s_s de cor externa = Amarelo;
ponto_de_tamanho externo interno = 14;

pus2 = "";
fio externo s_w = "Caminho";
uso_de_semana_externo de bool = verdadeiro;
uso_de_semana_de_semana_exterior = verdadeiro;

pus3 = "";
al al = "Alertas";
alertas externos de uso de bool_alerts = falsos;
string up_alert externo = "Para cima";
string externo down_alert = "Down";


dobrar[];
dobro para baixo[];
duplo meio[];
dobrar para cima2[];
dobro para baixo2[];
o dobro de nenhum[];

estático no tempo pré-vertido = 0;

//
int init()
{

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

//
int deinit()
{
nome da cadeia_de;
for(int c=BarsToCount;c>=0;c--)
{
name_de="Vol_"+DoubleToStr(c,0);
if(ObjectFind(name_de)!=-1) ObjectDelete(name_de);
}
retorno(0);
}
//////////////////////////////////////////
int start()
{
////////////
up[0]=EMPTY_VALUE;
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(use_points)
Ob_cre(0);

if(!use_points)
Ob_del(0);
////////////
if(Tempo[0] == antes do tempo) retorno(0);
prevtime = Tempo[0];
///////////////////////////
for(int c=BarsToCount;c>=1;c--)
{
////////////
if(use_points)
Ob_cre(c);

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

/////////////////
if(Close[c]>Open[c]) up[c]=Volume[c];
if(Close[c]<Open[c]) down[c]=Volume[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]=EMPTY_VALUE; down[c+1]=EMPTY_VALUE;
}

}


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

cor 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(nome)==-1)
{
ObjectCreate(nome,OBJ_TEXT,0,0)
}
ObjectSet(name,OBJPROP_TIME1,Time[num_de_bar]));
ObjectSet(name,OBJPROP_PRICE1,High[num_of_bar]+distance_point*Point);
ObjectSet(nome,OBJPROP_ANGLE,90);
ObjectSetText(name,DoubleToStr(Volume[num_do_bar],0),size_point, "Arrial",col_po);
ObjectSet(nome,OBJPROP_ANCHOR,ANCHOR_CENTER);
}

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

Arquivos anexados:
 

Eu crio um símbolo sintético baseado em EURUSD, nome ZIGZAG (para evitar conflito de nomes)

Eu importo as barras de minutos, tudo é importado com sucesso, mas quando solicito novamente o número de barras é 0. Há um arquivo criado "2019.hcc" de 39 mb na pasta "histórico/símbolo", a pasta "ticks" está toda vazia. Mudou o terminal (versão atual de 30 de maio de 2019), computador - em todos os lugares não funciona.

Qual poderia ser o erro?

Arquivos anexados:
simvol.zip  809 kb
 
SEM:

Eu crio um símbolo sintético baseado em EURUSD, nome ZIGZAG (para evitar conflito de nomes)

Eu importo as barras de minutos, tudo é importado com sucesso, mas quando solicito novamente o número de barras é 0. Há um arquivo criado "2019.hcc" de 39 mb na pasta "histórico/símbolo", na pasta "carrapatos" tudo está vazio. Mudou o terminal (versão atual de 30 de maio de 2019), computador - em todos os lugares não funciona.

Qual poderia ser o erro?

Nos nomes correspondentes
 
Olá a todos, que tal melhorar o balanço do artigo MT4 na versão demo e torná-lo modificável? Qual seria a possibilidade de alterar o equilíbrio da demonstração a seu critério. Ou encha. Ou retirar os fundos de demonstração e fazer com que a negociação na demonstração seja tão próxima do real?
 
oleqas1:
Olá, como você gostaria de melhorar a versão do artigo MT4 Balance on Demo e torná-la editável? Qual seria a possibilidade de um equilíbrio de demonstração por conta própria para mudar. Ou encha. Ou retirar os fundos de demonstração e fazer com que a negociação na demonstração seja tão próxima do real?

O MetaTrader4 não será mais atualizado - o desenvolvimento desta plataforma foi interrompido há muito tempo. No máximo, bugs significativos estão sendo corrigidos.

Vá para MetaTrader5 e use TesterWithdrawal()

Документация по MQL5: Общие функции / TesterWithdrawal
Документация по MQL5: Общие функции / TesterWithdrawal
  • www.mql5.com
Общие функции / TesterWithdrawal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Olá, como posso calcular a volatilidade das sessões européias em 3 dias?
 

Olá, se houver, por exemplo, um buystop e um buylimit.

Um buystop é aberto, modifica o buylimit e estabelece um novo buystop.

Abre a necessidade de modificar o buylimit e definir um novo buylimit.

Eu tentei fazer isso, ele se abre, mas mensagens de erro OrderModify error 1, OrderModify error 130. Como consertá-lo, não consigo descobrir. Por favor, me ajude.


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


 

O que são esses erros associados ao teste de um EA no testador de estratégia no MT4?


 
Alexandr Sokolov:

O que são esses erros associados ao teste de um EA no testador de estratégia no MT4?


Histórico de carga. F2.
Razão: