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

 
Vitaly Muzichenko:
Você tem que classificar por preço, porque não pode pesquisar por tamanho, a grade pode ser múltipla, e você encontrará a maior ou a menor, mas não a primeira ou a última.

Refiro-me à função que Marina postou.

A última encomenda é determinada pelo tempo.

 
Alekseu Fedotov:

Refiro-me à função que Marina postou.

A última encomenda é determinada pelo tempo.

Todos foram colocados ao mesmo tempo, portanto, com 14 pedidos pode haver uma diferença de 1 segundo, e não é possível classificá-los pelo tempo, apenas pelo preço.
 
Marina Korotkih:

Porque eu o convoco desta maneira

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
Entendi.
 

Caros programadores! Ajude-me a resolver esta questão. O Expert Advisor entra em uma profissão na M15, mas também aceita condições da H1. Quando as condições na H1 são cumpridas na M15, pode haver vários pontos de entrada. Na verdade, o problema é que eu quero usar apenas o primeiro ponto de entrada, até que as condições no H1 sejam revertidas.

k=0;
for (i=OrdensTotal()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Tempo[0]) // compra

 
customer03:

Caros programadores! Ajude-me a resolver esta questão. O Expert Advisor entra em uma profissão na M15, mas também aceita condições da H1. Quando as condições na H1 são cumpridas na M15, pode haver vários pontos de entrada. Na verdade, o problema é que eu quero limitar o primeiro ponto de entrada, até que as condições no H1 não sejam alteradas para o oposto.

k=0;
para (i=OrdensTotal()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == verdadeiro) a = 0;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Tempo[0]) // compra

Mas e sem o código? Especialmente, o código não é claro.

O que você quer exatamente? Não em abstrato, mas exatamente o que você quer obter.

 
customer03:

Caros programadores! Ajude-me a resolver esta questão. O Expert Advisor entra em uma profissão na M15, mas também aceita condições da H1. Quando as condições na H1 são cumpridas na M15, pode haver vários pontos de entrada. Na verdade, o problema é que eu quero me limitar ao primeiro ponto de entrada, enquanto no H1 as condições não mudam para o oposto.

k=0;
para (i=OrdensTotal()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == verdadeiro) a = 0;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Tempo[0]) // compra

Um algoritmo aproximado:

bool flag = false;
bool flagH1 = true;
bool flagM15 = true;

if(!flag && flagH1 && flagM15)
{
  flag = true;
}

if(!flagH1 && flag)
flag = false;
 
Artyom Trishkin:

E sem o código? Mais uma razão para não entender o código.

O que você quer exatamente? Não em abstrato, mas exatamente o que você quer obter.

Artyom olá! O objetivo é limitar a entrada na M15 a um (primeiro sinal), desde que haja um sinal na H1.
#property strict
extern double    Lot= 0.1;

extern int    stoploss=20;
extern int takeprofit=50;
// если stoploss и / или takeprofit = 0, то отключены.
//if stoploss and/or takeprofit = 0, are disconnected.



extern int  Magic = 99999999;
// уникальный номер, кот. советник метит свои ордера и впоследствии работает только с ними. При постановке на разные графики или т/ф, межики должны быть разными
extern int Slipp = 1;        
// величина максимально возможного проскальзывания.
//  slippage
extern int sec = 2000;
// количество миллисекунд сна советника между повторами отправки торгового поручения в случае неудачи
// number of milliseconds sleep of the EA between repetitions of sending a trade assignment in case of failure


//============================= Stochastic
input int InpKPeriod=13; // K Period
input int InpDPeriod=3; // D Period
input int InpSlowing=3; // Slowing

//============================= Stochastic
input int InpKPeriod1=13; // K Period
input int InpDPeriod1=3; // D Period
input int InpSlowing1=3; // Slowing





int A, a, b, i, ii, o;


    double SL, TP, op, stH0, stH1, stM0, stM1;
    bool c;
    datetime OldTime, Time0, opp;

int init()
  {    
  
   OldTime = iTime(NULL,Period(),0);
  
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  

                      
//====================================================================

stH0 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,0);
stH1 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,1);

stM0 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,0);
stM1 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,1);
  
//====================================================================  

          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }

      
if(  stM1 <= 20 && stM0 > 20  && stH0 > 70  && b==0   && opp != Time[0]) // покупка
      {
       opp = Time[0];

    RefreshRates();
    op = Ask;
   A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
    o = GetLastError();
         while (A < 0 && o != 4109 && o != 132 && o != 133)
         {
          Print("Error =", o);
         Sleep(sec);
         RefreshRates();
         op = Ask;
         A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
         o = GetLastError();
        }      
        
SL = op-stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op+takeprofit*Point;
if (takeprofit == 0 ) TP = 0;        
        
    if (SL != 0 || TP != 0)
      {
    RefreshRates();
    if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
    c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
    o = GetLastError();
      while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
                  o = GetLastError();
                  }  }          
     }

//---------------------------------------------------------------------------------------------------------+                          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }


if( stM1 >= 80 && stM0 < 80  &&  stH0 < 30   && b==0   && opp != Time[0]) // продажа
     {
     opp = Time[0];

      RefreshRates();
      op = Bid;
         A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
         o = GetLastError();
            while (A < 0 && o != 4109 && o != 132 && o != 133)
            {
             Print("Error =", o);
            Sleep(sec);
            RefreshRates();
            op = Bid;
            A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
            o = GetLastError();
            }    

SL = op+stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op-takeprofit*Point;
if (takeprofit == 0 ) TP = 0;
        
        if (SL != 0 || TP != 0)
      {
        RefreshRates();
         if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
         c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
         o = GetLastError();
         while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);                  
                  o = GetLastError();
                  } }
      }
      
    

   return(0);
   }      

  
//+------------------------------------------------------------------+
 
customer03:
Artyom olá! O objetivo é limitar a entrada em M15 a um (primeiro sinal), desde que haja um sinal em H1.

Portanto, verifique o número de posições em aberto na vela nula M15. Se você já tem uma posição e ela está aberta em uma vela nula M15, então não abra mais.
 

Olá, caros membros do fórum. Existe alguma maneira de definir o valor da parada de trilha embutida no Metatrader4 a partir de dentro da EA? Estou interessado nisto e não em acrescentar à EA um código para a execução de uma parada móvel que seja independente da parada móvel incorporada.

Agradecemos antecipadamente as respostas.

 
Dr_G:

Olá, caros membros do fórum. Existe alguma maneira de definir o valor da parada de trilha embutida no Metatrader4 a partir de dentro da EA? Estou interessado nisto e não em acrescentar ao Expert Advisor o código para a execução de uma parada móvel que é independente da parada móvel incorporada.

Agradecemos antecipadamente as respostas.

Não.
Razão: