[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 357

 
Zhunko:
Você se importaria de postar o código? Talvez um pseudo-código. O que você quer dizer com sem começar...? É uma função básica, como main() em C+++.

Depende de quais tarefas você vai resolver e determinar a localização de seu código no corpo do programa EA. Ninguém está nos obrigando a manter o código na função de início()!

A função start() é uma das três predefinidas em nosso modelo de código. Ele deve estar presente pelo menos!, porque o programa pai - o programa terminal (este é main(), o principal), executando suas tarefas principais, recebendo uma nova cotação do servidor (aproximadamente) basta olhar para o início de sua função e executar o código, que está nele, se ele apenas retornar(), então a função de início parará aqui.

 
"Profissionais, não passem", :) favor compartilhar um link para seu recurso favorito (de preferência em russo) de notícias, onde o calendário econômico e outras coisas úteis são publicadas. Se tais links não puderem ser postados aqui, então envie-os para mim até o PM.
 
ajude-me a escrever isto.

se houver um sinal de compra
verificar ordens de venda abertas
se houver, fechar
se não houver, abrir compra

se houver um sinal de venda
verificar ordens de compra abertas
se houver, fechar
se não houver, abrir compra
 
frxmax:
ajude a escrever o seguinte.

se houver um sinal de compra
Verificar ordens de venda em aberto
se for o caso, fechar
se não houver sinal para comprar

se houver um sinal de venda
Verificar ordens de compra em aberto
se sim, fechamos
se não houver sinal, reabrir a compra


Comece a escrever você mesmo - nós o ajudaremos

aqui está um ponto de partida para ajudar você https://book.mql4.com/ru/

 
abolk:


Comece a escrever você mesmo - nós o ajudaremos

aqui você vai https://book.mql4.com/ru/

Eu já "comecei".

total=OrdensTotal();
se(CONDIÇÃO de abrir uma ordem de compra)
if(total<1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+100*Point, "Buy",1111,0,Green);
if(bilhete<0)
{
Print("OrderSendido com erro #",GetLastError()));
retorno(0);
}
}else
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_SELL)
OrderClose(NULL,Lote,Perguntar,3);
retorno(0);
}
}

 
Quase certo, basta verificar primeiro e depois montar.
 
frxmax:
ajude a escrever o seguinte.

se houver um sinal de compra
Verificar ordens de venda em aberto
se sim, fechar
Se não houver sinal, podemos abrir uma ordem de compra.
//  в ф-ции старт 
  
if(....условие покупки....){
     if(CalculateOrders(Symbol(),OP_SELL)>0) Ord_Close(Symbol(),OP_SELL);
     Ticket(OP_BUY);      }

//-----------------------
int CalculateOrders(string simbol,int type)
  {
   int count=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==simbol)
        {
         if(OrderType()==type)  count++;
        
        }
     }
     
 return(count);
  }

//---------------------

void Ord_Close(string simb,int type) {  double price;
   
   if(type==OP_BUY)  price=MarketInfo(simb, MODE_BID); else
   if(type==OP_SELL) price=MarketInfo(simb, MODE_ASK);

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if( OrderSymbol()!=simb || OrderMagicNumber()!=mn) continue;
      //---- check order type 
      if(OrderType()==type)
        {  OrderClose(OrderTicket(),OrderLots(),price,3,White);   break;  }
        
        
     }   
     
     
 } 
//-----------------------------

int Ticket(int op){
      double pp = MarketInfo(Symbol(), MODE_POINT);
      double pBid = MarketInfo(Symbol(), MODE_BID);
      double pAsk = MarketInfo(Symbol(), MODE_ASK); 
      double open_price;
      double T;
      color col=NULL;
      int mn=0;
      
  if(op==0) {open_price=pAsk; col=Blue; T=pAsk+Take*pp;}
  if(op==1) {open_price=pBid; col=Red;  T=pBid-Take*pp;}
  int res=OrderSend(Symbol(),op,0.1,open_price,0,0,T,NULL,mn,0,col); 

   return(res);               }
 
KONDOR:

Muito obrigado por sua ajuda, mas eu fiz as coisas um pouco diferente e sua abordagem é um pouco confusa para mim.

Você poderia me explicar como vender tudo isso? Há muita coisa que eu não entendo aqui.

Você tem sido muito útil.

 
frxmax:

Tentei inverter tudo para vender - falhei. nenhuma negociação aberta

Erro 130. - As paradas não são certas, então onde as temos lá?

Agora abre um pedido para cada bar, mas eu preciso apenas de um.


total=OrdensTotal();

if(total<1)

etc.

 
KONDOR:


Hmm, eu fui mais fundo no jogo - lances e pedidos de mudança etc... obrigado por isso)

Também tenho as paradas resolvidas.

Razão: