[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 369

 
Colore MA Orlova.
 
Grazie
 

Ho ancora problemi a capire le funzioni di trading, ma so un po' di programmazione.

sarebbe bene per me implementare questo tipo di algoritmo con il vostro aiuto:

se (condizione di acquisto)

se c'è un ordine aperto

se questo ordine è sulla coppia in cui è scattata la condizione di acquisto

se è un ordine di vendita

chiuderlo

aprire un ordine di acquisto.

Aiutami a scriverlo, mi sto stancando, ho letto molto, non riesco ancora a capirlo.

 
frxmax:

Ho ancora problemi a capire le funzioni di trading, ma so un po' di programmazione.

Sarebbe bello per me implementare questo tipo di algoritmo con il vostro aiuto:

1. se (condizione di acquisto)

2. se c'è un ordine aperto

2.1. se questo ordine è sulla coppia in cui è stata attivata la condizione di acquisto

2.2. se è un ordine di vendita

3. chiuderlo

4. aprire un ordine di acquisto.

Aiutatemi a scriverlo, mi sto stancando, ho letto molto, ma ancora non capisco.


1. Quali sono le condizioni di acquisto?

2. Facciamo un ciclo per ordini di mercato del terminale

2.1 Nel ciclo (punto 2) controlliamo su quale coppia è aperto l'ordine selezionato e se è quello giusto, allora ...

2.2. controlla il tipo di ordine selezionato e se è Sell ...

3. Chiudi l'ordine selezionato

Aprire ordine di acquisto

O hai bisogno di tutto il codice? Questo non è un aiuto, ma un favore al ribasso. Tuttavia... Se non funziona - scriverò, ma nessun problema...

 

Sì, ho scritto e aiutato. e "ognuno ha la sua verità" su questo tema.

ecco la mia versione

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
                  }
                }
     }
        
     
 }
 

}

Ecco la versione di 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);               
 }
 

L'EA apre ancora i trade ad ogni cambiamento di prezzo quando la condizione di apertura dell'ordine è soddisfatta.

Un altro problema con gli ordini di chiusura su un segnale inverso (coprire un ordine di acquisto quando c'è un segnale di vendita e viceversa).

 
frxmax:

L'EA apre ancora i trade ad ogni cambiamento di prezzo quando la condizione di apertura dell'ordine è soddisfatta.

Un altro problema con gli ordini di chiusura su un segnale inverso (coprire un ordine di acquisto quando c'è un segnale di vendita e viceversa).

Questo è un altro modo di farlo. Scrivere un ToR (come chiedono Sergeev e Compositore). E poi ottenere un codice funzionante. In effetti, c'è una soluzione a tutti i problemi. E più di una volta è stato postato su questo forum.
 

Ciao a tutti. Ho sentito parlare del forex ma non sono entrato nei dettagli, conosco le basi della programmazione C.

Voglio imparare a programmare robot forex che generino reddito.

È davvero difficile? È possibile guadagnare con questo? Qual è il prerequisito minimo per iniziare? Cosa devo imparare?

 
Vinin:

C'è un altro modo per farlo. Scrivere i ToR (come chiedono Sergeev e Compositore). E poi ottenere un codice funzionante. In effetti, c'è una soluzione a tutti i problemi. E più di una volta esposto sul forum.
Il ToR per il compito che ho capito bene?
 
frxmax:

1. L'advisor apre ancora operazioni ad ogni cambiamento di prezzo quando la condizione per aprire un ordine è soddisfatta.

2. Un altro problema con gli ordini di chiusura su un segnale inverso (coprire un ordine di acquisto quando c'è un segnale di vendita e viceversa).

Prerequisito:

1. Se c'è una condizione per aprire un ordine (Buy); Se non c'è un ordine aperto (Buy), aprire un ordine Buy. Allo stesso modo per Vendere

2. Se c'è una condizione per aprire un ordine Buy, se c'è un ordine Sell aperto - chiudere Sell.

Così otteniamo:

1. Se c'è un segnale per aprire un ordine Buy ->>.

2. Se c'è un ordine di vendita aperto ->>.
2.1 Chiudilo.

3. Se non c'è un ordine di acquisto aperto ->> 3.
3.1 Aprirlo.

Allo stesso modo per Vendere