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

 
danil77783:

Olá. Você poderia me ajudar, se tiver tempo Pergunta é esta, preciso que a EA abra uma ordem em cada sinal de dois indicadores, (eles dão um sinal quando estão em certa combinação) em uma palavra, deve haver várias ordens para comprar ou vender no mercado, de acordo com os sinais dos indicadores. Mas eu tenho apenas uma ordem no mercado e até que feche a próxima não abre...... É uma questão de contar as ordens? Por favor, me dê uma dica. Se você precisar, posso enviar-lhe o código.

Obrigado de antemão!

remover a condição "se (OrderTotal()==0)....". - Eles apenas dizem: procurar por entradas e abrir novas ordens somente quando não há nenhuma ordem.

Se você não quiser abrir um grande pacote de novas encomendas sem tal condição, você precisa criar uma condição adicional. E isso depende de sua estratégia: não abrir um novo no tempo T do anterior, ou controlar as barras ou manter distâncias em pips entre as ordens...

 

Olá. Começarei por dizer muito obrigado por ajudar os novatos. Eu não seria capaz de responder perguntas elementares por mim mesmo dia após dia a um novato e depois a outro.

E a questão é esta:

Eu pensava antes, quando o mql4 era um pouco diferente, que qualquer processamento de pedidos, como abertura/fecho/modificação após possível erro, deveria ser interrompido pela função return(0). Por causa disso, se eu tivesse que fechar vários pedidos abertos ao preço atual, o testador os fecharia um a um em cada nova barra e isso provavelmente distorceria a imagem real (bastante dramática, às vezes) no testador (para cada carrapato de uma moldura). A nova EA tem que fechar várias ordens exatamente pelo sinal e parcialmente.

Pergunta: É possível processar todos eles (fechá-los parcialmente) em um loop, sem interromper o loop a cada vez? Será que o testador será capaz de lidar com isso? Ou seja, será capaz de fechar parcialmente todos eles em um único bar?

 
XpeHHukoB:

Olá. Começarei por dizer muito obrigado por ajudar os novatos. Eu não seria capaz de responder perguntas elementares por mim mesmo dia após dia a um novato e depois a outro.

E a questão é esta:

Eu pensava antes, quando o mql4 era um pouco diferente, que qualquer processamento de pedidos, como abertura/fecho/modificação após possível erro, deveria ser interrompido pela função return(0). Por causa disso, se eu tivesse que fechar vários pedidos abertos ao preço atual, o testador os fecharia um a um em cada nova barra e isso provavelmente distorceria a imagem real (bastante dramática, às vezes) no testador (para cada carrapato de uma moldura). A nova EA tem que fechar várias ordens exatamente pelo sinal e parcialmente.

Pergunta: É possível processar todos eles (fechá-los parcialmente) em um loop, sem interromper o loop a cada vez? Será que o testador será capaz de lidar com isso? Ou seja, será capaz de fechar parcialmente todos eles em um único bar?

Ele pode fazê-lo sem problemas em uma pequena condição. O código deve ser escrito corretamente.

 
Seric29:
Se há 2 funções (possivelmente sobrecarregadas), por exemplo, int Funkz(int a) int Funkz(int a, int b, int w), e então o programa é compilado, qual função funcionará mais rapidamente, a primeira considerando que tem um argumento ou não importa, porque o programa já está construído e o que está descrito no corpo, ou afinal há um pequeno efeito porque os argumentos da função representam uma pilha para a qual a memória está reservada?

Se você tem duas funções do mesmo nome com número diferente de argumentos, não se trata de qual delas será chamada mais rapidamente. Quando você chama uma função, você não escreve Funkz(), você especifica o número de argumentos.

A questão é se o compilador irá mastigar funções com o mesmo nome.

Como eu entendo, não estamos falando do código, mas do arquivo compilado?

 
Um... Obrigado por sua resposta, Alexei. muito já foi esclarecido.
 
Ajuda por favor, temos SL igual a um valor em pips (este nível de perda - parâmetro ajustável pelo usuário), e temos um preço simbólico para o dia baixo ou alto - é como uma segunda parada de perda e em diferentes pontos no tempo eles serão diferentes, eu preciso da função de comparação automática - para que depois daquele robô defina uma parada de perda para o menor parâmetro (SL ou Ilow - para comprar ou SL -iHign para vender) abaixo está o código que não dá o resultado desejado, eu não consigo entender o que é...
   пользовательский параметр - extern int    SL               = 1000;
//---------------------------------------------------------------
bool CheckForStopLossSell()
  {
   double Hign=iHigh(Symbol(),PERIOD_D1,1);
   double StopLoss=NormalizeDouble(SL*Point,Digits);
   double uroven = StopLoss;
   double OOPS=iLow(Symbol(),PERIOD_D1,1)-StepOpenOrder*Point;
   double StopLossS=NormalizeDouble(OOPS+StopLoss,Digits);
   //----------------------------------------
   if(Hign>StopLoss) Alert("StopLoss");
   return bool(StopLossS);
   
   //else
   if(Hign<StopLoss) Alert("Hign");
   return bool(Hign); 
   
   //else
   Alert("uroven");
   return bool(uroven); 
   
  }
//--------------------------------------------------------------
bool CheckForStopLossBuy()
  {
   double LOW=iLow(Symbol(),PERIOD_D1,1);
   double StopLoss=SL*Point;
   double uroven = StopLoss;
   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;
   double OOPB = (iHigh(Symbol(),PERIOD_D1,1)+SPREAD)+StepOpenOrder*Point;
   double StopLossB=OOPB-StopLoss;
   //-------------------------------------------
   if(LOW<StopLoss) Alert("StopLoss"); 
   return bool(StopLossB);  
   
   //else
   if(LOW>StopLoss) Alert("LOW"); 
   return bool(LOW);  
   
   //else
   Alert("uroven");
   return bool(uroven);  
   
  }
//---------------------------------------------------------------
 
XpeHHukoB:

Se você tem duas funções do mesmo nome com número diferente de argumentos, não se trata de qual delas será chamada mais rapidamente. Quando você chama uma função, você não escreve Funkz(), você especifica o número de argumentos.

A questão é se o compilador irá mastigar funções com o mesmo nome.

Você quer dizer o arquivo compilado, não o código?

E se as funções são diferentes, então qual funcionará mais rápido com menos ou mais argumentos? Acho que a sobrecarga com números diferentes também transporta uma carga ou é apenas por conveniência?

 

Por favor, me diga como escrever #define ?

Eu escrevo assim

#define  my_POS    cst_Position.my_Position

Se eu mudar esta construção para def - tudo funciona.

my_POS.SelectByTicket(pos_DATA(DATA_TICKET))

Mas quando eu apenas escrevo meu_POS. a lista de funções não aparecerá depois de um ponto.

O mesmo para

#define  pos_DATA  cst_Position.getPositionData

não há pistas após o pos_DATA(.

O que eu estou fazendo de errado?

 
bool operation=0;for(int pos=0;pos<OrdersTotal();pos++)
     {if ( OrderSelect (pos, SELECT_BY_POS) == false )  continue;
      if ( OrderSymbol()==Symbol()) break;}


//=========================================================================================================
if(Hour()>=2&&Hour()<=18&&operation==0){
if(OPB1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)
        {OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,0,Green);}}
        if (OrderType()==OP_BUY &&OrdersTotal()==1&&OrderMagicNumber()==8)
        {OrderSend(Symbol(),OP_SELLSTOP,5*lots,OrderOpenPrice()-(ss-ss/4)*Point,0,0,SstopClose,"My order#",80,0,Red);}
       

if(OPS1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)        
         {OrderSend(Symbol(),OP_SELL,lots,Bid,0,Ask+ss*Point,Bid-T*Point,"My order#",mn,0,Red);}}
         if (OrderType()==OP_SELL &&OrdersTotal()==1&&OrderMagicNumber()==8)
         {OrderSend(Symbol(),OP_BUYSTOP,5*lots,OrderOpenPrice()+(ss-ss/4)*Point,0,0,BstopClose,"My order#",80,0,Green);}}



if(OrderMagicNumber()==80){operation=0;
 {for( int  ii=OrdersTotal()-1;ii>=0;ii--)
       {OrderSelect(ii, SELECT_BY_POS);
        int  type   = OrderType();bool result = false;
        switch(type)
         {case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );//break;
          case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); //break;
         
          result = OrderDelete( OrderTicket() );//break;
          }}}}

Olá, caros especialistas!

Por favor, ajude-me a resolver este problema.

Ao testar qualquer par, tudo funciona corretamente, mas ao trabalhar com outras moedas, as ordens pendentes não são colocadas (tenho que expô-las à mão) e não são fechadas após o acionamento do Take Profit.

Favor aconselhar como alterar o código, se possível:



Muito obrigado de antemão

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
Arquivos anexados:
c5k8icfo.png  55 kb
 
Motzaart:

Olá, caros especialistas!

Por favor, ajude-me a resolver este problema.

...

Por favor, insira o código corretamente:


Razão: