[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 465

 

Tutto è selezionato normalmente, ma gli errori sono strani, non riesco a capirlo con il tester.

Dice che ho chiuso il lotto 0.3 e venduto il lotto 0.7 allo stesso tempo. È così che si chiude una parte di un affare nel tester? Non so da dove provengano tali volumi; non vedo alcuna informazione su tali volumi nel mio Expert Advisor.

   for(Counter1=0;Counter1<OrdersTotal();Counter1++)
     {
     if(OrderSelect(Counter1,SELECT_BY_POS,MODE_TRADES) == false) break;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
       {
       if(OrderType() == OP_BUY)
         {
         
         BuyOpened = 1;
         if((Bid - OrderOpenPrice()) / Point >= TrailingLevel1 && (Bid - OrderOpenPrice()) / Point < TrailingLevel2)
           {
           // Перенести в безубыток
           }
         }
       if(OrderType() == OP_SELL)
         {
         TrailingPrice1 = OrderOpenPrice() - TrailingLevel1*Point;
         MyOrderStopLoss1 = NormalizeDouble(OrderStopLoss(),4);
         MyOrderStopLoss1 = OrderOpenPrice() - BreakEven*Point;
         SellOpened = 1;
         if((OrderOpenPrice() - Ask) / Point >= TrailingLevel1 && (OrderOpenPrice() - Ask) / Point < TrailingLevel2 && OrderStopLoss() != MyOrderStopLoss1)
           {
           ClosingLot = OrderLots() / 100 * ClosingPercent;
           ClosingLot = NormalizeDouble(ClosingLot,3);
           OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           }
         }
       }
     }
 
sss2019:

Tutto è selezionato normalmente, ma gli errori sono strani, non riesco ancora a capire il tester.

Dice che ho chiuso il lotto 0.3 e venduto il lotto 0.7 allo stesso tempo. È così che si chiude una parte di un affare nel tester? Inoltre, non so da dove vengano questi volumi quando una parte di un trade viene chiusa e poi si apre 0,16, 0,24, 0,12; l'Expert Advisor non ha questi volumi.

sì, questo è il modo in cui viene visualizzata una parte della chiusura - prima tutto è chiuso, poi una parte è aperta


Ho 2 domande:

1) come si fa a sapere cosa non chiudere dopo?

al prossimo tick, la condizione sarà nuovamente soddisfatta per questa funzione

2) se non mi sbaglio, il biglietto d'ordine cambia dopo la chiusura parziale, cioè

OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           

non ci sarà nessun cambiamento nella seconda linea


3) E non dimentichiamo la normalizzazione...

 
ilunga:

sì, questo è il modo in cui viene visualizzata la chiusura di una parte - prima tutto chiuso, poi la parte aperta


due domande immediatamente:

1) come fate a sapere che non c'è bisogno di chiudere ulteriormente?

la condizione sul prossimo tick sarà soddisfatta di nuovo per questa funzione

2) se non mi sbaglio, il biglietto d'ordine cambia dopo la chiusura parziale, cioè

non ci sarà nessun cambiamento nella seconda linea


3) E non dimentichiamo la normalizzazione...


Il biglietto sta davvero cambiando? Questa deve essere la ragione di tutti gli errori. Allora perché il biglietto non cambia quando l'ordine viene cambiato manualmente? Ho bisogno di sapere con certezza se il biglietto cambia o no.
 


Davvero cambiare, grazie mille
 
Ho sentito che quando si ottiene un prezzo da una coppia di valute per lavorare ulteriormente con esso, dovrebbe essere normalizzato, per esempio, un prezzo ottenuto da un minimo e dovrebbe essere normalizzato per impostarlo su uno stop loss, è vero?
 
sss2019:
Ho sentito che quando si ottiene un prezzo da una coppia di valute, è necessario normalizzarlo, ad esempio si ottiene un prezzo da un minimo e bisogna normalizzarlo ad uno stop loss, è vero?

Sì, ma intendiamo la normalizzazione al momento di impostarla su Ordersend/OrderModify/... prima di queste funzioni è possibile lavorare con esso ed eseguire operazioni
 
sergeev:

Sì. Ma la normalizzazione si intende al momento della sostituzione in Ordersend/OrderModify/... prima di queste funzioni è possibile lavorare con esso ed eseguire operazioni

A quante cifre dovrebbe essere normalizzato? Per impostazione predefinita, il prezzo sembra avere 4 cifre dopo la virgola, anche per i valori di prezzo a cinque cifre, almeno Low[0] e High[0] hanno sempre solo 4 cifre dopo la virgola, ho provato ad emetterlo via Alert o via Print,
 
sss2019:

A quante cifre dovrebbe essere normalizzato? Per impostazione predefinita, il prezzo sembra avere 4 cifre dopo la virgola anche per il valore a cinque cifre, almeno Low[0] e High[0] hanno sempre solo 4 cifre dopo la virgola, ho provato a pubblicarlo tramite Alert o tramite Print,

di default il prezzo Digits ha delle cifre dopo il punto decimale

e Alert e Print ne produce solo 4 per impostazione predefinita. Usare la stringa DoubleToStr( valore doppio, cifre int) per più

 

Aiuta poi a implementare un trailing stop, come questo. Ordine di vendita

         if((OrderOpenPrice() - Ask) / Point > Trailing) //Если прибыль в пунктах больше чем уровень трейлинг стопа
           {
           NewStopLoss = Ask + TrailingLevel2*Point;
           double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }
           OrderModify(OrderTicket(),OrderOpenPrice(),NewStopLoss2,OrderTakeProfit(),OrderExpiration(),Black);
           }

Il problema è che lo stop loss dovrebbe essere arrotolato solo in avanti, ma nel mio ordine si arrotola anche all'indietro.

________________________________

La mia domanda è sparita, scusate.

 
sss2019:

Aiuta poi a implementare un trailing stop, come questo. Ordine di vendita

Il problema è che lo stop loss dovrebbe essere spostato solo in avanti, ma l'ho anche spostato all'indietro.

double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }

è equivalente a

NewStopLoss2 = NewStopLoss;
Motivazione: