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

 
Renat Akhtyamov:
Espero que haja um valor atribuído à variável Percentual no OnInit()?
A variável Percentual é definida pelo usuário. Eu deixei cair OnInit().
 
Michail_David:
Minha variável percentual é definida pelo usuário. OnInit() Eu o deixei cair.
Se Lotes=0, o testador não abrirá nada
 
Renat Akhtyamov:
se Lotes=0, nada será aberto pelo testador
Eu tenho lotes calculados em relação a Porcentagem. O testador calcula o número de lotes, mas nenhuma negociação.

 Margin_Percent=AccountFreeMargin()*Percent/100; 

Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);

      Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));

if(Lots>Lots_Volume)
        {
         Lots=Lots_Volume;
        }
      else if(Lots<Lots_Volume)
         Lots=MathFloor(Lots);
      Print("Количество лотов : ",Lots);
      return;
 
Michail_David:
Eu tenho lotes calculados em relação a Porcentagem. O testador calcula o número de lotes, mas não há trocas.

E ainda, onde no código está definido Porcentagem

e o que o seguinte comando imprime("Lotes : ",Lotes); ?

 
Renat Akhtyamov:

Ainda assim, onde no código está o Percentual

e o que o seguinte comando imprime("Número de lotes : ",Lotes); ?

#property link      ""
#property version   "1.00"
#property strict
//--- input parameters
input int      Percent=50;
input int      Fast_EMA_Period=12;
input int      Slow_EMA_Period=25;
input int      Signal_Period=9;
input double   Step_PSAR=0.02;
input double   Maximum_PSAR=0.2;
input int      MAGICNUMBER=413;
static datetime New_Time;// Время текущего бара
double Margin_Percent;  //Используемые средства для открытия ордеров
double Lots;//Определение общего количества лотов
double Lots_Volume;
double MacdCurrent;//Параметры MACD основной линии текущего бара
double MacdPrevious1;//Параметры MACD основной линии предыдущего бара
double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара
double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   bool New_Bar=false;                    // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   New_Time=TimeCurrent();
   if(Time[0]==New_Time) // Сравниваем время
      New_Bar=true;      // Поймался новый бар
   else if(New_Bar==false) // Если бар не новый..
A quinta linha especifica Porcentagem. As impressões dos toros: "Quantidade de lotes: 90.0100000001". Talvez devêssemos acrescentar NormalizeDouble()?
 
Michail_David:
Na quinta linha, o percentual está definido. O registro mostra: "O número de lotes é 90.0100000001". Talvez devêssemos acrescentar NormalizeDouble()?

Não há nada de errado com o lote.

Procure por um erro na lógica de abertura da ordem.

Nesses casos, eu geralmente estabeleço uma condição explícita que abrirá o pedido

 
Renat Akhtyamov:

Não há nada de errado com o lote.

Procure por um erro na lógica de abertura da ordem.

Normalmente, nesses casos, eu estabeleço uma condição explícita de que a ordem será aberta

Por favor, dê-nos um exemplo com uma condição explícita. Se eu entendi corretamente, deveria haver uma condição no laço para abrir. Isto é correto?
 
Michail_David:
Por favor, dê um exemplo com uma condição explícita. Se entendi corretamente, deveria haver uma condição no laço para a abertura. Certo?
Dê um comando para abrir uma ordem no início do código, logo após o cálculo do lote e certifique-se de que o testador funciona corretamente. Então você pode colocar tudo de volta.
 
Renat Akhtyamov:
Dê um comando para abrir uma ordem no início do código, logo após o cálculo do lote, e certifique-se de que o testador está funcionando corretamente. Então você pode colocar tudo de volta no lugar.
Obrigado. Eu encontrei um erro. Eu tinha voltado; após o cálculo dos lotes. É por isso que os lotes não foram abertos
 
Michail_David:
A quinta linha especifica Porcentagem. O registro exibe: "Número de lotes 90.0100000001". Talvez devêssemos acrescentar NormalizeDouble()?
Sim, você deve. E não apenas lotes, mas todos os outros valores que são passados para o servidor. Os lotes também são úteis para verificar o mínimo e o máximo permitidos no valor da conta, também na mudança de etapa, houve casos em que o lote pode ser alterado em incrementos de 0,03, portanto 90,01 não funcionará, pelo menos sobrescrito.