Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 72

 
Vitalie Postolache:


Eu direi a mesma coisa. Você não é bom em lógica. Qual é o problema para calcular imediatamente o lote inicial, com base nos fundos disponíveis e no valor do risco (acho que foi escrito cerca de 3%)? Por que você tem que fazer tudo em um só lugar?

Pegue o valor da margem livre, multiplique pelo risco, divida por 100 e o valor da margem para 1 lote - aqui está a fórmula mais simples para calcular o lote com uma porcentagem especificada da margem livre. Além disso, é preciso levar em conta a etapa de mudança de lote e evitar que o tamanho do lote mín/máx, permitido pela corretora, seja ultrapassado:


Eu lhe disse que a EA negocia em um pequeno intervalo de tempo no qual há uma probabilidade de que 9 ordens opostas consecutivas se sobreponham e cada próxima ordem seja multiplicada por 2, portanto a margem pode não se manter e a última ordem pendente pode não se abrir, e portanto temos que calcular a partir do último lote máximo possível. Calculei que o melhor número de pedidos em intervalos de 5-10 minutos é 9. Em geral, preciso calcular uma margem caso todos os pedidos sejam abertos e com base nestes dados em ordem inversa para calcular o primeiro lote.

 
if(OrderTotal() >= OrderCount)
{
retornar;
}
//----
if(r > 50 && p > m) //abrir pedido de compra
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //abrir pedido de compra
}
//-----
if(r < 50 && p < m) // condições de ordem de venda aberta
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue);
}
//----- fechar pedidos
para (int i=1; i<=OrdensTotal(); i++)
{
if(OrderSelect(ticketB,SELECT_BY_TICKET)==verdadeiro)
{
if(r < 50 && p < m)
{
OrderClose(ticketB,0.1,Bid,5,Red);
}
}

}

Onde é que eu escrevi errado? Acho que tirei um exemplo, você poderia me dizer como escrever corretamente para que a ordem feche?

em condições de compra reversa... Estou rachando meu cérebro.

 
funnyrain8:
if(OrderTotal() >= OrderCount)
{
retornar;
}
//----
if(r > 50 && p > m) //abrir pedido de compra
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //abrir pedido de compra
}
//-----
if(r < 50 && p < m) // condições de ordem de venda aberta
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue);
}
//----- fechar pedidos
para (int i=1; i<=OrdensTotal(); i++)
{
if(OrderSelect(ticketB,SELECT_BY_TICKET)==verdadeiro)
{
if(r < 50 && p < m)
{
OrderClose(ticketB,0.1,Bid,5,Red);
}
}

}

Onde é que eu escrevi errado? Acho que tirei um exemplo, você poderia me dizer como escrever corretamente para que a ordem feche?

em condições de compra reversa... Estou rachando meu cérebro.


 if(OrdersTotal()>=OrderCount)  //Обрати внимание на эту конструкцию
     {                            //
      return;
     }
//---- 
   if(r>50 && p>m) //условия открытия ордера на покупку
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
               OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
      ticketB=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //открыnие ордера на покупку     

     }

//-----     
   if(r<50 && p<m) //условия открытия ордера на продажу
     {
     for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
               OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
      ticketS=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue);
     }

Assim
 
funnyrain8:
if(OrderTotal() >= OrderCount)
{
retornar;
}
//----
if(r > 50 && p > m) //abrir pedido de compra
{
ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //abrir pedido de compra
}
//-----
if(r < 50 && p < m) // condições de ordem de venda aberta
{
ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue);
}
//----- fechar pedidos
para (int i=1; i<=OrdensTotal(); i++)
{
if(OrderSelect(ticketB,SELECT_BY_TICKET)==verdadeiro)
{
if(r < 50 && p < m)
{
OrderClose(ticketB,0.1,Bid,5,Red);
}
}

}

Onde é que eu escrevi errado? Acho que tirei um exemplo, você poderia me dizer como escrever corretamente para que a ordem feche?

em condições de compra reversa... Estou rachando meu cérebro.


Se o pedido for selecionado no bilhete, você não precisa de uma ação no laço. Se você quisercorrigir o código, use o botão SRC paracolar o código na mensagem.
 
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict    
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int ticketB,ticketS;
void OnTick()
//------------------------------------------------------------------------------------------------
{
double p = iClose("EURUSD",PERIOD_M15,0);                                    //показание текущей цены 
double r = iRSI  ("EURUSD",PERIOD_M15,21,PRICE_CLOSE,0);                     //значение индюка RSI
double m = iMA   ("EURUSD",PERIOD_M15,89,0,MODE_EMA,PRICE_CLOSE,0);          //значение индюка МА
int    OrderCount  = 1;

//---------------ПОДСЧЕТ ОРДЕРОВ------------------------------------------------------------------
if(OrdersTotal() >= OrderCount)
          {
             return;
          }   
//-------------ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ--------------------------------------------------------------------
/*if(r > 50 && p > m)                                                        //условия открытия ордера на покупку
    {   
        ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green);         
    }
//------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ--------------------------------------------------------
if(r<50 && p<m)                                                           
     {
      for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketB,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_BUY)
              {
                  ticketB = OrderClose(OrderTicket(),0.1,Bid,5,Red);
              }
           }
        }
     }*/
//------------------ОТКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r < 50 && p < m)                                                        //условия открытия ордера на продажу
    {
        ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); 
    } 
//---------------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ---------------------------------------------------------
if(r>50 && p>m) 
     {
   for(int i=1; i<=OrdersTotal(); i++)
        {
         if(OrderSelect(ticketS,SELECT_BY_TICKET)==true)
           {
            if(OrderType()==OP_SELL)
              {
                  ticketS = OrderClose(OrderTicket(),0.1,Ask,5,Red);
              }
           }
        }
     }
}
//+------------------------------------------------------------------+
Obrigado pelo SRC), isto é o que parece, parece assim, a venda deve acontecer quando a vela fecha abaixo do wop e rsi abaixo de 50, e fecha o pedido em condições opostas, e simultaneamente depois de fechar a compra deve acontecer e depois de fechar, então um pedido e não mais e assim por diante ciclicamente ... mas agora tenho um pedido aberto e é isso, e as paradas não estão funcionando ...
 
funnyrain8:
Obrigado pelo SRC), isto é o que parece, parece assim, a venda deve acontecer quando a vela fecha abaixo do pulso e o rsi abaixo de 50, e fecha o pedido nas condições opostas, e ao mesmo tempo depois do fechamento deve acontecer a compra e depois do fechamento, depois um pedido e não mais e assim sucessivamente ... mas agora abro um pedido e tudo, e paro não funciona ...


Eu o reescrevi em meu próprio estilo, espero que você entenda, se algo não estiver claro, não hesite em perguntar

//+------------------------------------------------------------------+
//|                                                   funnyrain8.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict

input int             MagicNumber  = 20110315;       // Номер копии
input string          CommentOrder = "Origenal";     // Комментарий к ордеру
input int             Slippage=100;             // Проскальзование (Пипс)
input double          Lot=0.01;           // Объем лота 
input int             SignalBar=0; // Сигнальный бар 

sinput string            s1=NULL; // Setting indicator slow МА
input int                ma_period=89;    // Period
input ENUM_MA_METHOD     ma_method=MODE_EMA;//Method calculation
input ENUM_APPLIED_PRICE ma_price=PRICE_CLOSE;//Price calculation

sinput string            s2=NULL; // Setting indicator RSI
input int                rsi_period=21; // Period
input ENUM_APPLIED_PRICE rsi_price=PRICE_CLOSE;//Price calculation
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(TotalOrder()==0)OrderOpen(GetSignal());
   else OrderClose(GetSignal());
  }
//+------------------------------------------------------------------+
int GetSignal()
  {
   double rsi = iRSI(_Symbol,PERIOD_CURRENT,rsi_period,rsi_price,SignalBar);                     //значение индюка RSI
   double ma = iMA   (_Symbol,PERIOD_CURRENT,ma_period,0,ma_method,ma_price,SignalBar);          //значение индюка МА

   if(Close[SignalBar]>ma && rsi>50.0)return(OP_BUY);
   if(Close[SignalBar]<ma && rsi<50.0)return(OP_SELL);
   return(WRONG_VALUE);
  }
//+------------------------------------------------------------------+
int TotalOrder()
  {
   int value=0;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderType()>1)continue;
      value++;
     }
   return(value);
  }
//+------------------------------------------------------------------+
void OrderOpen(int type)
  {
   if(type==WRONG_VALUE)return;
   double price_open=(type==OP_BUY)?NormalizeDouble(Ask,_Digits):NormalizeDouble(Bid,_Digits);
   int ticket=OrderSend(_Symbol,type,Lot,price_open,Slippage,0,0,CommentOrder,MagicNumber);
   if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError());
  }
//+------------------------------------------------------------------+
void OrderClose(int type)
  {
   if(type==WRONG_VALUE)return;
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderMagicNumber()!=MagicNumber)continue;
      if(OrderSymbol()!=_Symbol)continue;
      if(OrderType()!=type)continue;
      double price_close=(type==OP_BUY)?NormalizeDouble(Bid,_Digits):NormalizeDouble(Ask,_Digits);
      bool res=OrderClose(OrderTicket(),OrderLots(),price_close,Slippage);
      if(!res)Print("Ошибка закрытия ордера № - ",GetLastError());
     }
  }
//+------------------------------------------------------------------+

...

 
Sergey Gritsay:


reescrito em meu próprio estilo, espero que você entenda, se não entender nada pergunte

...


oh, pensei ter escrito quase tudo, exceto o fechamento e ainda tenho muito a aprender...muito obrigado agora pelo menos tenho um exemplo a seguir de...lata, obrigado novamente)
 
Olá. Fiz o download do software Metatrader 5. Eu me inscrevi em 2 sinais. O saldo de minha conta é positivo em 20$. Estou tentando instalar hospedagem virtual e nada funciona. Eu pressiono o navegador, conecto-me à conta de negociação, nem sequer tenho tal guia na mesa de hospedagem virtual. Estou lhe enviando screenshots. Como eu me conecto à hospedagem compartilhada?
Arquivos anexados:
3p46y0.jpg  273 kb
g4ppe22.jpg  264 kb
 
Жанна Платонова:
Olá. Fiz o download do software Metatrader 5. Eu me inscrevi em 2 sinais. O saldo de minha conta é positivo em 20$. Estou tentando instalar hospedagem virtual e nada funciona. Eu pressiono o navegador, conecto-me à conta de negociação, nem sequer tenho tal guia na mesa de hospedagem virtual. Estou lhe enviando screenshots. Como eu me conecto à hospedagem compartilhada?

Clique em ajuda no menu principal.
 
Olá. Tenho uma pergunta - no mac (sierra) em todos entregues (através do vinho) de diferentes plataformas de empresas mt4 a mesma falha - o terminal se você o liberar de seu lugar normal no fundo para movê-lo como uma janela livre - ele encolhe e trabalha através dele é completamente impossível. A desativação do auto-arranjador não funciona. Devolver o terminal no primeiro local absolutamente impossível - ou seja, ele simplesmente não se prende e não abre mais. Tenho uma pergunta - qualquer pessoa pode conhecer um atalho ou botão para retornar toda a interface ao seu lugar original. Sinceramente.