[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 369

 
Cor MA Orlova.
 
Obrigado
 

Ainda estou tendo problemas para descobrir as funções comerciais, mas sei um pouco sobre programação.

seria bom para mim implementar este tipo de algoritmo com sua ajuda:

se (condição de compra)

se houver uma ordem em aberto

se esta ordem está no par em que a condição de compra desencadeou

se for uma ordem de venda

fechá-lo

abrir uma ordem de compra.

Ajude-me a escrever isto, estou ficando cansado, já li muito, ainda não consigo entender.

 
frxmax:

Ainda estou tendo problemas para descobrir as funções comerciais, mas sei um pouco sobre programação.

Seria bom para mim implementar este tipo de algoritmo com sua ajuda:

1. se (condição de compra)

2. Se houver uma ordem em aberto

2.1. se esta ordem estiver no par onde a condição de compra foi acionada

2.2. se for uma ordem de venda

3. Feche-a

4. abrir um pedido de compra.

Tenho lido muito, mas ainda não consigo entender.


1. Qual é a condição para comprar?

2. Fazemos um loop por ordem do mercado do terminal

2.1 No laço (ponto 2) verificamos em qual par a ordem selecionada está aberta e se é a ordem correta, então ...

2.2. Verifique o tipo da ordem selecionada e se é VENDA ...

3. Fechar a ordem selecionada

Pedido de compra em aberto

Ou você precisa do código completamente? Isto não é uma ajuda, mas um favor em baixa. No entanto... Se não funcionar - vou escrever, mas sem problemas.

 

Sim, eu escrevi e ajudei. e "cada um tem sua própria verdade" sobre esta questão.

aqui está minha versão

if (LoCurent>LoPrevious && FtCurent>FtPrevious)
      {
       ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point,"Buy",1111,0,Green);
       if(ticket>0)
          {
           if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
          }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
      }
// условие ПРОДАЖИ 
   if(LoCurent<LoPrevious && FtCurent<FtPrevious)
       {
        ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask+StopLoss*Point,Ask-TakeProfit*Point,"Sell",2222,0,Red);
        if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
        else Print("Error opening SELL order : ",GetLastError()); 
        return(0); 
        }    
    return(0);
 // ЗАКРЫТИЕ СДЕЛОК
 for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
           if(LoCurent<LoPrevious || FtCurent<FtPrevious || LoCurent<-30 || LoPrevious<-30)
               {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
               }
           }else
               {
                 if(LoCurent>LoPrevious || FtCurent>FtPrevious || LoCurent>30 || LoPrevious>30)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                     return(0); // exit
                  }
                }
     }
        
     
 }
 

}

Aqui está a versão do KONDOR

if(LoCurent<LoPrevious)
     if(CalculateOrders(Symbol(),OP_SELL)>0) Ord_Close(Symbol(),OP_SELL);
     if(total<1)
     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()!=111) 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+TakeProfit*pp;}
  if(op==1) {open_price=pBid; col=Red;  T=pBid-TakeProfit*pp;}
  int res=OrderSend(Symbol(),op,Lot,open_price,1,Bid-StopLoss*Point,Bid+TakeProfit*Point,NULL,mn,0,col); 

   return(res);               
 }
 

O Expert Advisor ainda abre negócios a cada mudança de preço quando a condição para abrir um pedido é satisfeita.

Há também um problema com o fechamento de pedidos em sinal inverso (cobrindo um pedido de compra quando um sinal de venda é recebido e vice versa).

 
frxmax:

A EA ainda abre negócios a cada mudança de preço quando a condição de abertura do pedido é satisfeita.

Outro problema com o fechamento de pedidos em sinal inverso (cobrindo um pedido de compra quando há um sinal de venda e vice versa).

Esta é outra maneira de fazer isso. Escreva um ToR (como Sergeev e Composter pedem). E depois obter um código de trabalho. Na verdade, existe uma solução para todos os problemas. E mais de uma vez foi postado neste fórum.
 

Olá a todos. Ouvi falar sobre forex mas não entrei em detalhes, conheço o básico da programação C.

Quero aprender como programar robôs forex que gerariam renda.

Posso realmente ganhar dinheiro com isso? Qual é o pré-requisito mínimo para começar? O que eu preciso aprender?

 
Vinin:

Há outra maneira de fazer isso. Escreva o ToR (como Sergeev e Composter pedem). E depois obter um código de trabalho. Na verdade, existe uma solução para todos os problemas. E mais de uma vez exposto no fórum.
O ToR para a tarefa que entendo corretamente?
 
frxmax:

1. O consultor ainda abre negócios em cada mudança de preço quando a condição para abrir um pedido é satisfeita.

2. Outro problema com o fechamento de pedidos em sinal inverso (cobrindo um pedido de compra quando há um sinal de venda e vice versa).

Pré-requisito:

1. Se houver uma condição para abrir um pedido (Comprar); Se não houver um pedido aberto (Comprar), abra um pedido de compra. Da mesma forma para Vender

2. Se houver uma condição para abrir uma ordem de compra, se houver uma ordem de venda aberta - fechar Vender.

Assim obtemos:

1. Se houver um sinal para abrir um pedido de compra ->>

2. Se houver uma ordem de venda em aberto ->>.
2.1 Feche-o.

3. se não houver ordem de compra em aberto ->> 3.
3.1 Abra-o.

Da mesma forma para Vender

Razão: