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

 
FOReignEXchange:


A chi piace quello che piace. La calligrafia di ognuno è diversa. Forse hai capito bene, ma io penso che sia sciatto.

Io non lo farei in questo modo.

In primo luogo, non sono sicuro del perché dovrei dichiarare una variabile lì e che senso ha, non lo capisco nemmeno io.

In secondo luogo, la linea PriceBuy = Ask; si trova subito dopo la funzione OrderSend. E per quanto ho capito, i calcoli vengono immediatamente passati alla linea successiva non appena questa funzione finisce la sua esecuzione. Non credo che il prezzo di Ask possa cambiare. Cerco di scrivere tutto nel modo più semplice possibile, riducendo il numero di caratteri, se non interferisce con il normale funzionamento del programma. Posso assegnare un valore nello stesso modo in cui lo fai tu, non vedo un problema qui. Ho scritto la prima e più semplice cosa che mi è venuta in mente.

Ho scritto una volta un Pips Expert Advisor e ho partecipato a un concorso in cui il profitto minimo da prendere in considerazione è di 5 pips. Ho impostato TP=5, SL=10 nel mio EA e sono andato a fare una passeggiata. Sono tornato a casa la sera, ho guardato il terminale e sono rimasto deluso. Il mio Pips Expert Advisor ha chiuso la maggior parte dei miei trade con profitto, ma il profitto di alcuni di essi era di 4 punti e anche di 3, e non di 5, di cui avevo bisogno. A proposito, SL a volte non era 10, ma 11 o 12 punti...

Perché? Sono sicuro che conosci la risposta! :D

Ecco la situazione reale, in cui ho smesso di contare i prezzi Ask e Bid come prezzi di apertura degli ordini. Se 1-2 punti non è significativo per voi, va bene. Per me sono le piccole cose che sono importanti.

 
MaxZ:

Perché no? Sono sicuro che conosci la risposta! :D

No. All'inizio ho pensato che fosse perché lo spread non è stato contato.

Ci sono stati dei trade in cui il profitto è stato di 6-7 pip?

 
FOReignEXchange:
No. All'inizio ho pensato che fosse perché lo spread non è stato calcolato.

Merda... Per citare me stesso:

MaxZ:

Terzo: se lo Slippage è specificato nella funzione OrderSend trade e vogliamo aprire un ordine di acquisto, l'ordine non necessariamente si aprirà esattamente al prezzo Ask, poiché ci vuole una certa quantità di tempo per eseguire un ordine dato dalla funzione OrderSend e il prezzo può allontanarsi da questo valore.

E a quale valore di prezzo stiamo legando TP e SL? Per chiedere... Il prezzo è cambiato, ma TP e SL non si sono spostati da nessuna parte.

 
MaxZ:

A quale valore di prezzo fisseremo TP e SL? Per chiedere... Il prezzo è cambiato, ma TP e SL non si sono spostati da nessuna parte.

Non posso garantire che la mia ortografia sia assolutamente corretta. Ma lo faccio sempre in questo modo quando ne ho bisogno. Non ho notato nulla di sbagliato.

Non posso dire nulla sul tuo caso, dove hai avuto una fissazione di profitto inferiore a 5 pips, perché non ho visto il codice.

 

Era:

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL =  Ask-StopLoss*Point;
   TP =  Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      Alert("Открыт ордер Buy ", Ticket, ".");
      Opn_B = False;
   }
   else
      Alert("Ошибка: ", GetLastError());
}

Diventato:

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   SL = Ask-StopLoss*Point;
   TP = Ask+TakeProfit*Point;
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, SL, TP, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         
         if (NormalizeDouble(OrderOpenPrice()-OrderStopLoss(), Digits) != NormalizeDouble(StopLoss*Point, Digits))
         {
            SL = OrderOpenPrice()-StopLoss*Point;
            TP = OrderOpenPrice()+TakeProfit*Point;
            
            Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
            if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
               Alert("Ордер Buy ", Ticket, " модифицирован.");
            else
               Alert("Ошибка: ", GetLastError());
         }
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}

Il principio è questo. Ma in realtà è un po' più complicato di così...

Quante linee? Davvero? :)))

 
MaxZ:

Era:

Diventato:

Il principio è questo. Ma in realtà è un po' più complicato di così...

Quante linee? Davvero? :)))


??? Non capisco. Dove sono lo SL e il TP nel primo esempio?
 
FOReignEXchange:

??? Non capisco. Dove sono lo SL e il TP nel primo esempio?

Ho mostrato solo il principio. Va bene, allora. Aggiunto.

MaxZ:

Il principio è questo. Ma in realtà è un po' più complicato di così...

Se l'ordine non si apre al prezzo indicato, ci può essere un errore quando si modifica l'ordine e ci si imbatte nello stesso rake... Ecco perché in realtà cerchiamo di modificare l'ordine più di una volta se ha un biglietto positivo... Non vogliamo copiare tutto il codice. È ingombrante. Ma il principio è affermato.
 
Ah, capisco. SL e TP sono in piedi prima della funzione OrderSend. Forse era questo il problema?
 
FOReignEXchange:
Ah, capisco. SL e TP stanno davanti alla funzione OrderSend. Forse era questo il problema?
Quale potrebbe essere il problema? Nel momento in cui SL e TP sono calcolati, il prezzo avrà il tempo di cambiare? ;)))
 
MaxZ:
Quale potrebbe essere il problema? Nel momento in cui SL e TP sono calcolati, il prezzo avrà il tempo di cambiare? ;)))

Ti ho detto che mentre la funzione OrderSend è in esecuzione, il prezzo potrebbe cambiare. Quindi dobbiamo assegnarlo dopo, quando è già cambiato.
Motivazione: