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

 

Ho provato ad aggiungerlo, ha quasi funzionato, ma apre le posizioni nel modo che mi serve se il prezzo si muove in una direzione.

Per esempio ha chiuso un acquisto, poi ha aperto un nuovo acquisto e vendita, poi di nuovo chiuso un acquisto, poi aperto di nuovo anche acquisto e vendita, ma se ha chiuso NON comprare e vendere non si apre nuovo (((((

Per favore, dategli un'occhiata e vedete se posso aiutarvi...

che mucchio di stronzate ho scritto )) . Ma è così che funziona ho queste condizioni di apertura...

Ho bisogno di un'altra condizione quando aprirà una posizione se il prezzo cambia ...

File:
 
Ho capito bene? NumberOfPositions(Symbol(),OP_BUY,Magic); è questo il numero di posizioni di acquisto aperte?
 
Frostr:
Ho capito bene? NumberOfPositions(Symbol(),OP_BUY,Magic); è il numero di posizioni di acquisto aperte?


Il tuo Expert Advisor non definisce condizioni di apertura, si limita ad aprire nella direzione che tu specifichi (variabili BUY e SELL). Puoi aggiungere una condizione per controllare se l'ultimo affare è stato chiuso con profitto o perdita in questo EA o nel tuo. Ma a mio parere, fa già fronte al suo compito - mostra più chiaramente la non redditività di questa strategia. In realtà, non abbiamo nemmeno bisogno di un Expert Advisor per questo, può essere calcolato in mezz'ora sulla storia anche senza una calcolatrice. Se lo Stop Loss è uguale al Take Profit, la perdita è uguale allo spread moltiplicato per il numero di trade, in tutti gli altri casi - spread più la metà della differenza tra Stop Loss e Take Profit.

P.S. In generale, anche se il codice del gufo è diverso, fa esattamente quello che farà il tuo EA, se gli aggiungi la condizione che vuoi. Cioè, se il prezzo è cambiato ed è andato nell'altra direzione, aprirà due accordi opposti ad ogni chiusura. Era solo più facile per me rimuovere dal codice tutte le cose "inutili" che non sono legate al compito da svolgere.

P.P.S.Hai capito bene NumberOfPositions(Symbol(),OP_BUY,Magic).

 
gheka:
quale ufficio postale può inviare messaggi sulla posta in arrivo e sul suo contenuto?

ad esempio mail.ru
 
rigonich:

Il tuo Expert Advisor non ha condizioni di apertura, apre semplicemente nella direzione che hai impostato (le variabili BUY e SELL). Puoi aggiungere una condizione per controllare se l'ultimo affare è stato chiuso con profitto o perdita in questo EA o nel tuo. Ma a mio parere, fa già fronte al suo compito - mostra più chiaramente la non redditività di questa strategia. In realtà, non abbiamo nemmeno bisogno di un Expert Advisor per questo, può essere calcolato in mezz'ora sulla storia anche senza una calcolatrice. Non appena aggiungi la tua condizione a qualsiasi Expert Advisor (aprire due trade opposti e chiudere solo con Stop Loss o Take Profit), l'importo della perdita diventa fisso e dipende solo dal numero di trade.



Non so perché il numero di posizioni aperte dipenda da questo. Non posso regolarlo(!

L'unico modo per ridurre il numero di posizioni aperte è quello di aumentare il lotto. Se si imposta il lotto al massimo, allora si apriranno 1-3 posizioni in una volta sola

Se si imposta il lotto al minimo, aprirà 500-1500 posizioni alla volta

 
Frostr:



Per qualche motivo apro 500-800 posizioni in una volta quando provo l'EA, non capisco perché il numero di posizioni aperte dipende da esso e non posso regolarlo(!

L'unico modo per ridurre il numero di posizioni aperte è quello di aumentare il lotto. Se si imposta il lotto al massimo, allora si apriranno 1-3 posizioni in una volta sola

Se si imposta il lotto al minimo, aprirà 500-1500 posizioni alla volta

1. Può essere aperto solo un numero limitato di ordini alla volta.

2. Se il lotto viene aumentato significativamente, non è possibile aprire posizioni aggiuntive per mancanza di fondi.

 
Frostr:



Il mio Expert Advisor, che mi hai dato durante i test, per qualche motivo mi apre 500-800 posizioni in una volta sola, non capisco cosa determina il numero di posizioni aperte e non posso regolarle (

L'unico modo per ridurre il numero di posizioni aperte è quello di aumentare il lotto, se si imposta il lotto al massimo, allora si apriranno 1-3 posizioni alla volta.

Se si imposta il lotto al minimo, aprirà 500-1500 posizioni alla volta

File:
 
rigonich:


 

Ho scritto qualcosa di simile al trailing per il mio EA, ma non funziona, a seconda di ciò che cerco di cambiare per farlo funzionare, genera l'errore 1 quando si modifica, o semplicemente non va oltre la prima stampa (Print("Leading Buy position"); )... quale potrebbe essere la ragione, sarei felice di sentire qualsiasi suggerimento, grazie in anticipo!

bool TrailingStop()
   {
   int MD0=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if ((OrderMagicNumber()==11111)==true)
      {
      Print("Ведём позицию Buy");
      while(OrderCloseTime()==0)
         {
         if ((NormalizeDouble(Bid-OrderStopLoss()+StepStop*Point,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
               {
               RefreshRates();
               Print("текущий бид-",Bid,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(Bid-OrderStopLoss(),Digits),", новый стоп-",NormalizeDouble(Bid-StopLevel*Point,Digits));
               if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
                  Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
               else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
               }
         Sleep(1000);
         }
      if (OrderCloseTime()>0)
         {
         Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
         return(true);
         }
      }
   else
      {
      if ((OrderMagicNumber()==22222)==true)
         {
         Print("Ведём позицию Sell");
         while(OrderCloseTime()==0)
            {
            if ((NormalizeDouble(OrderStopLoss()+StepStop*Point-Ask,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
               {
               RefreshRates();
               Print("текущий бид-",Ask,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(OrderStopLoss()-Ask,Digits),", новый стоп-",NormalizeDouble(Ask+StopLevel*Point,Digits));
               if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
                  Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
               else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
               }
            Sleep(1000);
            }
         if (OrderCloseTime()>0)
            {
            Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
            return(true);
            }
         }
      else return(false);
      }
   }
 
Ekburg:

Ho scritto qualcosa di simile al trailing per il mio EA, ma non funziona, a seconda di ciò che cerco di cambiare per farlo funzionare, genera l'errore 1 quando si modifica, o semplicemente non va oltre la prima stampa (Print("Leading Buy position"); )... quale potrebbe essere la ragione, sarei felice di sentire qualsiasi suggerimento, grazie in anticipo!


La vostra condizionewhile(OrderCloseTime()==0). Se entrate in questo ciclo, i tentativi di modifica saranno ripetuti finché l'ordine non si chiude o non si incontra l'operatore brek o return, che non avete nel ciclo.

Scusa, ho fatto un casino. Ci sono, ma non li ho notati subito senza occhiali. Rimosso la parentesi superflua e aggiunto l'output. Provatelo, potrebbe funzionare.

File:
0101.mq4  3 kb
Motivazione: