[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 68

 
Stells:

Buon pomeriggio.

Domanda come testare o i cui risultati sono più affidabili?

In Expert Advisor il periodo H1 è chiaramente prescritto ovunque.

Sto testando su m1 in apertura - perdita netta.

L'ho testato su H1 con tutte le zecche che salgono.

Il problema è che le fermate sono piccole - solo pochi punti. I profitti sono grandi.

Se l'EA ha un controllo esplicito sull'apertura di una nuova barra e funziona solo quando si apre una nuova barra, allora puoi testare sull'apertura di una nuova barra. Altrimenti, solo zecche. Inoltre, gli stop sono piccoli e saranno ovviamente spazzati via all'apertura di una nuova barra, perché su M1 una barra può prendere il tuo stop in pochi pip in un minuto. Prova tutte le zecche su M1.
 
artmedia70:
Se l'EA ha un controllo esplicito sull'apertura di una nuova barra e funziona solo quando si apre una nuova barra, allora puoi testare sull'apertura di una nuova barra. Altrimenti, solo zecche. Inoltre, gli stop sono piccoli e saranno ovviamente spazzati via all'apertura di una nuova barra, perché su M1 una barra può prendere il tuo stop in pochi pip in un minuto. Prova tutte le zecche su M1.

come saranno (in teoria) tutti i tick diversi dall'H1?
 

Ciao, per favore aiutami a capire il codice, cosa sto facendo di sbagliato. Sono nuovo della programmazione. Ho letto il tutorial di mql4 e ho guardato un sacco di codici Expert Advisor, ma non riesco ancora a trovare le risposte alle mie domande. Ho un terminale a 5 cifre, conto ECN, spread variabile + commissione. L'Expert Advisor è il più semplice, apre un ordine di vendita quando il МА veloce incrocia il МА lento dall'alto verso il basso e viceversa quando il МА veloce incrocia il МА lento dal basso verso l'alto. In realtà il TS è molto più complesso, solo che non ho ancora tutte le funzioni di base che funzionano correttamente e non posso testarlo adeguatamente, figuriamoci ottimizzarlo, ho deciso di non complicare il codice con calcoli ridondanti. Ecco il codice dell'Expert Advisor stesso.

#define MAGICMA  20050610
extern string text1              ="===========================MoneyManagment===========================";
extern double Lots               = 0.1;
extern string text2              ="======================Simple_Close_settings=========================";
extern double TakeProfit         = 100;
extern double StopLoss           = 100;
extern double Bezubitok          = 30; //Расстояние, через которое пройдёт цена от открытия сделки в "+", чтобы перенести СтопЛос в безубыток
extern string text3              = "===================TrailingStopLoss_settings=======================";
extern double Trailing           = 100; //Расстояние, через которое будет подтягиватся СтопЛос к текущей цене
extern double Slippage           = 3; // Допуск проскальзования цены при открытии и закрытии сделок
extern string text4              = "===================Indicator_Trade_System_settings=================";
extern int    Fast_EMA_Period    = 8;
extern int    Slow_EMA_Period    = 21;




//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
int CheckForOpen()
  {
   double X1,X2,X3,X4;
   int ticket;

   
   X1=iMA(NULL,0,Fast_EMA_Period,0,MODE_EMA,PRICE_CLOSE,1);
   X2=iMA(NULL,0,Slow_EMA_Period,0,MODE_EMA,PRICE_CLOSE,1);
   X3=iMA(NULL,0,Fast_EMA_Period,0,MODE_EMA,PRICE_CLOSE,2);
   X4=iMA(NULL,0,Slow_EMA_Period,0,MODE_EMA,PRICE_CLOSE,2);
//----
if(Volume[0]>1) return;
  {   
      //ENTRY Ask(buy, long) 
      if (X3<=X4 && X1>X2)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,",",MAGICMA,0,White);
        }
      //ENTRY Bid (sell, short)
      if (X3>=X4 && X1<X2)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,",",MAGICMA,0,Red);
        }
  }
//----
  }
//+------------------------------------------------------------------+
//| Check for TrailingStop                                           |
//+------------------------------------------------------------------+
void CheckForTrailing()
 {

     if (Trailing>0) for(int i=0; i<=OrdersTotal();i++) 
     {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
           if (OrderMagicNumber()==MAGICMA && OrderSymbol()==Symbol()) 
           {
            if (OrderType()==OP_BUY && Bid-OrderOpenPrice()>Trailing*Point && Bid-OrderStopLoss()>Trailing*Point)
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
            if (OrderType()==OP_SELL && OrderOpenPrice()-Ask>Trailing*Point && OrderStopLoss()-Ask>Trailing*Point)
            OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
           }
        }
}
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double X1,X2,X3,X4;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   X1=iMA(NULL,0,Fast_EMA_Period,0,MODE_EMA,PRICE_CLOSE,1);
   X2=iMA(NULL,0,Slow_EMA_Period,0,MODE_EMA,PRICE_CLOSE,1);
   X3=iMA(NULL,0,Fast_EMA_Period,0,MODE_EMA,PRICE_CLOSE,2);
   X4=iMA(NULL,0,Slow_EMA_Period,0,MODE_EMA,PRICE_CLOSE,2);
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
     
      if(OrderType()==OP_BUY)
        {
         if(Bid>=(OrderOpenPrice()+TakeProfit*Point)||Bid<=(OrderOpenPrice()-StopLoss*Point))OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
        
      if(OrderType()==OP_SELL)
        {
         if(Ask<=(OrderOpenPrice()-TakeProfit*Point)||Ask>=(OrderOpenPrice()+StopLoss*Point)) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }



//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
  {
   if(Bars<25 || IsTradeAllowed()==false) 
     return (0);
   if (AccountFreeMargin()<(100*Point*Lots))
     {
      Print("Стоп! Недостаточно средств для продолжения торговли. Свободная маржа = ", AccountFreeMargin());
      return(0);  
     }
      
   if(Trailing>0) CheckForTrailing();  
     
      
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
   
 
   

   return(0);
  }
//+------------------------------------------------------------------+

Forse qualcuno può rispondere alle mie domande:

1. Quando apro un ordine, tengo dei nulls in OrderSend dove dovrebbero essere i parametri Stopplos e TakeProfit; ad un tentativo di mettere altri numeri lì, l'esperto non apre le operazioni; ho controllato se posso aprire manualmente un'operazione e impostare immediatamente SL e TP, quale può essere il problema?

2. Non capisco perché ho impostato TP, SL e TS di 100 pips, anche se i trade sono chiusi non multipli di questi pips, anche tenendo conto dello spread. Forse la mia funzione di chiusura dell'ordine non funziona? Come posso limitare la perdita in questo caso, originariamente impostato SL, e come faccio a farlo seguire al prezzo solo in + direzione?

3. La mia società di intermediazione ha Stop Level=100 pips, come posso impostare TP e SL virtuali, in modo da poter impostare livelli inferiori allo Stop Level, come alla chiusura manuale delle posizioni? (I pip nei conti Ecn non sono vietati).

4. È possibile fare quanto segue, e se è possibile: fare una chiusura inversa e contemporaneamente chiudere dallo SL e dal TP con un trasferimento al Breakeven (a seconda di quale evento accade per primo)? Ho provato a farlo, ma nel tester apre una posizione e non la chiude fino alla fine del test, ma raccoglie solo gli scambi). Ognuno dei due funziona.

Grazie in anticipo a tutti coloro che risponderanno!

 

Buon pomeriggio...

Solo una domanda

Prendiamo un frattale su Daily... Come trovare il prezzo che termina la formazione di questo frattale, diciamo su H1 .... È auspicabile che sul prezzo appaia la freccia...

 
Cmu4:
Signori, come fa un EA a connettersi a un server e a una porta specifici? È possibile?
Quindi, nessun esperto in materia qui?
 
Cmu4:
Signori, come fa un EA a connettersi a un server e a una porta specifici? È possibile?

Cosa significa connettersi a un socket o leggere informazioni via http?
 
Ho una domanda semplice e probabilmente stupida.Un tester di strategie può commettere errori...Che metodi avete per testare le vostre strategie?..Grazie.
 

Solo una domanda

Prendiamo un frattale su Daily... Come trovare il prezzo che termina la formazione di questo frattale, diciamo su H1 .... È auspicabile che sul prezzo appaia la freccia...

 

Buon pomeriggio!

Domanda sulle funzioni speciali: init(), start(), deinit().

Come sappiamo, anche dal tutorial, per terminare (uscire) da questa funzione speciale, si DEVE scrivere COMPLETAMENTE l'operatore Return (per esempio, operatore condizionale IF-ELSE).

Operatore di ritorno (per esempio, nell'operatore condizionale IF-ELSE).

Cosa significano allora i valori di ritorno? Per esempio: Return(0) ed eventualmente qualche altro intero (Return(1));

 

Buon pomeriggio a tutti!

Per favore aiutatemi a modificare un po' l'indicatore "FX5_Divergence_V2.1".

Sto lavorando con 3 schermi. L'indicatore nella finestra viene visualizzato con il suo nome e alcuni altri valori che rendono difficile vedere l'indicatore. Spesso a causa di queste cifre non riesco a vedere i nodi indicatori ed è difficile confrontarli (cerchiati in giallo nello screenshot).

(Per favore aiutatemi a correggere l'indicatore in modo che venga visualizzato solo il nome dell'indicatore, senza tutte le altre cifre)

Indicatore e screenshot in appendice.


Grazie in anticipo a chiunque possa aiutare)


Motivazione: