Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1856

 

Un consiglio. Sono bloccata su una domanda.

Come contaiOpen per Ask o Bid?

double DayOpenone = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 0), Digits);

double DayOpentwo = NormalizeDouble(iOpen(Symbol(), PERIOD_D1, 1), Digits); 

La questione è che confrontando il prezzo di apertura di oggi con il prezzo di apertura di ieri sembra causare lo spread colocation e poi ci sono ulteriori problemi nel codice. O vengono scambiati solo bai o vendite perché i prezzi iOpen non sono corretti in alcuni giorni.

 
Порт-моне тв iOpen per Ask o Bid?

Il problema è che confrontando il prezzo aperto di oggi con il prezzo aperto di ieri sembra che si crei uno spread colocation e quindi ho problemi nel codice. Posso scambiare solo offerte o vendite perché i prezzi iOpen non sono corretti in alcuni giorni.

Il grafico è basato sul prezzo di offerta

 

Ragazzi, per favore consigliatevi.

Sto scrivendo un EA multivaluta, tutto funziona come previsto tranne che per gli ordini di apertura. Per favore, ditemi qual è il problema.

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

Non ricevo nessun errore, semplicemente non apro gli ordini

 
Sergey Dymov un EA multivaluta, tutto funziona come previsto tranne che per gli ordini di apertura. Per favore, ditemi qual è il problema.

Non ricevo nessun errore, semplicemente non apre gli ordini

OrderSend

Valore restituito

Restituisce il numero di ticket assegnato all'ordine dal server commerciale o -1 in caso di fallimento. Per ottenere informazioni sugli errori, è necessario chiamare GetLastError().

Anche il compilatore ti dice che gli Ordersend devono essere controllati.

L'acquisto viene fatto con Ask. Ma potrebbe funzionare anche con Bid, se lo slippage è almeno uguale allo spread, il che potrebbe rendere più difficile trovare questo bug.

 

un EA multicurrency e tutto funziona come previsto, tranne che per gli ordini di apertura. Sto cercando messaggi di errore.

      if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         OrderSend("USDJPY", OP_BUY, 0.1, Bid1, 3, NormalizeDouble((Ask1+StopLoss*Point1),2), NormalizeDouble((Ask1-TakeProfit*Point1),2), NULL, 0, 0, 0);
        }

Non dà nessun errore, semplicemente non apre un ordine.

Avete notato dov'è l'errore?

       if((USDTP<=0)&&(JPYTP>=3)&&(z_USDJPY!=2))
        {
         Alert("Продавай USDJPY. USD=", USDTP, ", JPY=", JPYTP);
         z_USDJPY=2; //
         text_massage="Продавай USDJPY";
         SendNotification(text_massage);
         RefreshRates();
         Ask1=MarketInfo("USDJPY",MODE_ASK);
         Bid1=MarketInfo("USDJPY",MODE_BID);
         Point1=MarketInfo("USDJPY",MODE_POINT);
         int nDigits = (int)MarketInfo("USDJPY", MODE_DIGITS);
         OrderSend("USDJPY", OP_SELL, 0.1, NormalizeDouble(Bid1, nDigits), 3, NormalizeDouble((Ask1-StopLoss*Point1), nDigits), NormalizeDouble((Ask1+TakeProfit*Point1), nDigits), NULL, magic, 0, 0);
        }

https://docs.mql4.com/ru/trading/ordersend

Примечание

Quando si apre un ordine a mercato (OP_SELL o OP_BUY), solo gli ultimi prezzi Bid (per la vendita) o Ask (per l'acquisto) possono essere usati come prezzo di apertura. Se l'operazione viene eseguita per uno strumento finanziario diverso da quello corrente, allora per ottenere le ultime quotazioni di questo strumento, si deve usare la funzioneMarketInfo() con il parametro MODE_BID o MODE_ASK.

Non puoi usare un prezzo stimato o non normalizzato. Se il prezzo di apertura richiesto non era nel flusso dei prezzi, o il prezzo richiesto non è normalizzato secondo il numero di decimali, verrà generato l'errore 129 (ERR_INVALID_PRICE). Se il prezzo di apertura richiesto è gravemente superato, verrà generato un errore 138 (ERR_REQUOTE) indipendentemente dal valore del parametro slippage. Se invece il prezzo richiesto non è aggiornato ma è ancora presente nel flusso dei prezzi, l'ordine sarà aperto al prezzo corrente e solo se il prezzo corrente rientra nell'intervallo prezzo+-slippage.

...

È anche auspicabile impostare una magia unica per il robot.

OrderSend - Торговые функции - Справочник MQL4
OrderSend - Торговые функции - Справочник MQL4
  • docs.mql4.com
OrderSend - Торговые функции - Справочник MQL4
 
Mihail Matkovskij #:

il prezzo di apertura non era nel flusso dei prezzi o il prezzo richiestonon è normalizzato secondo ilnumero di cifre dopo la virgola, quindi

.

Per quanto ne so, Ask e Bid sono già normalizzati. Una questione simile è già stata sollevata e non c'è stata contraddizione.

La magia e le cifre di stoploss e profitto possono essere appropriate, ma l'intenzione dell'autore non è nota.

 
Andrey Sokolov #:

Per quanto ne so, Ask e Bid sono già normalizzati. Una questione simile è già stata sollevata e non c'è stata contraddizione.

Forse è il caso di menzionare il magik e le cifre dello stop-loss e del profitto, ma non so quale fosse l'idea dell'autore.

Per quanto ne so, la documentazione non dice una parola al riguardo. Quindi, è meglio prendere delle precauzioni. Non peggiorerà la situazione.

Per quanto riguarda lo SL e il TP, sono calcolati. E quindi devono assolutamente essere normalizzati secondo il valore delle cifre.

 

Ciao amici.

 
Potete dirmi se il profitto sulla storia è cerchiato in blu, questo include la commissione e lo swap?
 

Buon pomeriggio.

Come posso ottenere il tempo di apertura del secondo e dei successivi ordini, perché OpenOrderTime() dà solo il primo, e anche come posso ottenere il prezzo di apertura del secondo e dei successivi ordini, perché l'analogo OpenOrderPrice() dà anche il prezzo del primo?