Discussione sull’articolo "Operazioni di Trading in MQL5 - È Facile" - pagina 3

 

Potete dirmi se è possibile implementare questa costruzione da MQL4 utilizzando m_Trade.PositionModify (m_Trade è un membro della classe CTrade)?

...
if(TrendUp==true) 
   for(int i=0; i<10; i++)
      {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0);
        if(ticket>0 && i<9) OrderModify(ticket,0,0,Ask+SPS*take_koef[i],0);
      };
...

Lo scopo dello script è quello di aprire un acquisto sul mercato con un determinato numero di lotti, e poi impostare un take profit in 10 parti. Mi sono bloccato perché senza impostare uno stop loss PositionModify dà l'errore 10016(Incorrect stops in the request). E non c'è nessuna operazione per impostare uno stop :). Nella guida si dice che è possibile non specificare un valore:

Параметры

symbol

[in]  Наименование торгового инструмента, по которому предполагается модифицировать позицию.

sl

[in]  Новая цена, по которой сработает Stop Loss (либо, если изменение не нужно, предыдущее значение).

tp

[in]  Новая цена, по которой сработает Take Profit (либо, если изменение не нужно, предыдущее значение).

Ho provato a passare il valore ottenuto dalla richiesta di acquisto precedente (ovviamente a zero), ebbene, la stessa rastrellata solo nel profilo. Ecco il mio codice:

...
         m_Trade.Buy(Lots);// acquistare l'intero volume al mercato
         if(m_Trade.ResultRetcode()==10008)//se l'acquisto è andato a buon fine, modificare la posizione impostando i take-out
           {
            S="Richiesta soddisfatta. Numero d'ordine: "+IntegerToString(m_Trade.RequestOrder());
            Comment(S);
            sl=m_Trade.RequestSL();// ottenere lo stop loss dall'ultima richiesta
            for(int i=0;i<=10;i++)
              {
               if(m_Trade.PositionModify(symbol,sl,Ask+SPS*take_koef[i]))
                 {
                  S+="Snap Take:"+IntegerToString(i);
                  Comment(S);
                 }
               else
                 {
                  S+="Errore di modifica di SnPosition con codice: "+IntegerToString(m_Trade.ResultRetcode());
                  Comment(S);
                  return(4);
                 };
              };
...

Grazie in anticipo per il vostro aiuto.

[Eliminato]  
Questo è un aiuto enorme per avviare la programmazione EA.
 

Buona introduzione alla programmazione orientata agli oggetti in MQL5.

Con MT5 build 1347 il primo esempio di codice non viene compilato con l'errore "illegal switch expression type".

Ho dovuto aggiungere il casting a int nelle dichiarazioni switch in AccountInfo.mqh per farlo funzionare, come:

switch((int)MarginMode())

 
Николай Осипов:

Salve,
Quando si utilizza la funzione BuyStop nel codice per negoziare i futures RTS-3.13 (RIH3), continua a verificarsi un errore:
10022 TRADE_RETCODE_INVALID_EXPIRATION - Data di scadenza dell'ordine non valida.


Nicholas, saluti. Hai per caso risolto questo problema? Ho le stesse difficoltà su RTS-6.17, non capisco come risolverlo.
 
Rashid Zeynalov:
Problema simile su RTS-3.13 Opening-demo, provato tutto (mentre gli ordini limite sono impostati su ORDER_TIME_SPECIFIED_DAY come scritto nel profilo del simbolo) !!!!. Mentre l'ordine buy-stop è perfettamente aperto sul mercato manualmente. Si tratta di un'anomalia del terminale, dovresti scrivere agli sviluppatori.
Rashid, ciao. Hai per caso risolto questo problema? Sto riscontrando le stesse difficoltà sull'Open reale su RTS-6.17.

 
sgtkachev:
Rashid, ciao. Hai per caso risolto questo problema? Sto riscontrando le stesse difficoltà su Open reale su RTS-6.17.

Scusa, non avevo notato la domanda. Prova a sostituire questo file e riporta il risultato, per favore.
File:
Trade.mqh  68 kb
 

Salve

Su alcuni broker (FoxPro per esempio) quando si cerca di aprire una posizione si verifica l'errore 10030. Descrizione del codice: riempimento non valido. Su altri broker (per esempio Alpari) funziona senza queste righe

Nel blocco di inizializzazione dell'Expert Advisor ho scritto valori diversi nel codice:

trade.SetTypeFilling(SYMBOL_FILLING_FOK);

или
trade.SetTypeFilling(SYMBOL_FILLING_IOC);

или

trade.SetTypeFilling(ORDER_FILLING_RETURN);

Non aiuta. Come risolvere il problema? Oppure questa classe CTrade è obsoleta e non corrisponde agli ultimi aggiornamenti del terminale e devo scrivere le operazioni di trading secondo lo schema standard attraverso la struttura?


UPD: Rashid ha postato un file di libreria qui sopra, che ha risolto il mio problema. È triste che la libreria standard abbia un errore. Ora studierò il confronto per vedere se è possibile apportare alcune modifiche direttamente nell'EA senza sostituire la libreria in modo che tutto funzioni.

Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Начало работы - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему...
 
Buono
 
makk:

Buona introduzione alla programmazione orientata agli oggetti in MQL5.

Con MT5 build 1347 il primo esempio di codice non viene compilato con l'errore "illegal switch expression type".

Ho dovuto aggiungere il casting a int nelle dichiarazioni switch in AccountInfo.mqh per farlo funzionare, come:

switch((int)MarginMode())

 

Ciao, grazie per questo post molto utile e per favore aiutatemi a risolvere questo problema. Sono nuovo di MT5 e sto imparando a creare EA, quindi ho copiato il codice di esempio per eseguire Ctrade.Buy ma il backtest è fallito. Ecco ulteriori informazioni:


1) Conto: È un conto live con valuta di base NZD.

2) Impostazioni del MetaEditor per il backtest:

Opzioni


3) Codice: Copiato da https://www.mql5.com/it/articles/481:


//+------------------------------------------------------------------+

//|                                                         demo.mq5 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"

#include<Trade\Trade.mqh>


//--- object for performing trade operations

CTrade  trade;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

   //--- set MagicNumber for your orders identification

   int MagicNumber=123456;

   trade.SetExpertMagicNumber(MagicNumber);

   //--- set available slippage in points when buying/selling

   int deviation=10;

   trade.SetDeviationInPoints(deviation);

   //--- order execution mode

   trade.SetTypeFilling(ORDER_FILLING_RETURN);

   //--- logging mode: it would be better not to declare this method at all, the class will set the best mode on its own

   trade.LogLevel(1);

   //--- what function is to be used for trading: true - OrderSendAsync(), false - OrderSend()

   trade.SetAsyncMode(true);

   //---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---

   

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

   BuySample1();

  }


//--- Buy sample  

//+------------------------------------------------------------------+

//|  Buying a specified volume at the current symbol                 |

//+------------------------------------------------------------------+

void BuySample1()

  {

//--- 1. example of buying at the current symbol

   if(!trade.Buy(0.1))

     {

      //--- failure message

      Print("Buy() method failed. Return code=",trade.ResultRetcode(),

            ". Code description: ",trade.ResultRetcodeDescription());

     }

   else

     {

      Print("Buy() method executed successfully. Return code=",trade.ResultRetcode(),

            " (",trade.ResultRetcodeDescription(),")");

     }

//---

  }

4) Log degli errori (Si prega di notare che sto testando solo su EUR/USD):

GJ 0 19:36:44.410 127.0.0.1 login (build 1730)

HH 0 19:36:44.420 Rete 38520 byte di informazioni sul conto caricati

JO 0 19:36:44.420 Rete 1482 byte di parametri del tester caricati

QE 0 19:36:44.420 Rete 188 byte di parametri di input caricati

FR 0 19:36:44.421 Rete 443 byte di lista di simboli caricati

IF 0 19:36:44.421 Aggiunto file esperto del tester: Experts\demo.ex5. 46684 byte caricati

QH 0 19:36:44.433 Deposito iniziale del tester 10000,00 NZD, leva 1:100

JN 0 19:36:44.437 Tester inizializzato con successo

ES 0 19:36:44.437 Rete 46 Kb di dati totali di inizializzazione ricevuti

PP 0 19:36:44.437 Tester Intel Core i7-4510U @ 2.00GHz, 8103 MB

RJ 0 19:36:44.799 Simboli EURUSD: simbolo da sincronizzare

HR 0 19:36:44.800 Simboli EURUSD: simbolo sincronizzato, 3624 byte di informazioni sul simbolo ricevuti

NJ 0 19:36:44.800 Storia EURUSD: sincronizzazione della storia avviata

GO 0 19:36:44.856 Storia EURUSD: caricati 27 byte di dati storici da sincronizzare in 0:00:00.000

RQ 0 19:36:44.856 Storia EURUSD: sincronizzata la storia dal 2012.01.01 al 2017.11.15

EF 0 19:36:44.993 Cronologia EURUSD,giornaliera: cache cronologica allocata per 1010 barre e contiene 312 barre dal 2014.01.01 00:00 al 2014.12.31 00:00

ND 0 19:36:44.993 Storico EURUSD,Daily: lo storico inizia da 2014.01.01 00:00

OL 0 19:36:44.996 Tester EURUSD,giornaliero (HalifaxPlus-Live): ogni tick generato

GN 0 19:36:44.996 Tester EURUSD,Daily: iniziato il test di Experts\demo.ex5 dal 2015.01.01 00:00 al 2017.11.15 00:00

CK 0 19:36:56.288 Simboli NZDUSD: simbolo da sincronizzare

IS 0 19:36:56.288 Simboli NZDUSD: simbolo sincronizzato, 3624 byte di informazioni sul simbolo ricevuti

JL 0 19:36:56.288 Storia NZDUSD: sincronizzazione della storia avviata

HJ 0 19:36:56.575 Cronologia NZDUSD: caricati 14 Kb di dati cronologici da sincronizzare in 0:00:00.078

LS 0 19:36:56.575 Cronologia NZDUSD: sincronizzata la cronologia dal 2013.01.01 al 2017.11.15

CO 0 19:36:56.579 Simboli EURNZD: simbolo da sincronizzare

OJ 0 19:36:56.580 Simboli EURNZD: simbolo sincronizzato, 3624 byte di informazioni sul simbolo ricevuti

DL 0 19:36:56.580 Storia EURNZD: sincronizzazione storia avviata

MK 0 19:36:56.656 Storia EURNZD: caricati 27 byte di dati storici da sincronizzare in 0:00:00.000

OD 0 19:36:56.656 Cronologia EURNZD: sincronizzata la cronologia dal 2013.01.01 al 2017.11.15

IN 0 19:36:56.665 Operazione 2015.01.02 03:00:00 mercato acquista 0,10 EURUSD (1,20538 / 1,20549 / 1,20538)

PE 0 19:36:56.665 Operazioni 2015.01.02 03:00:00 operazione #2 acquisto 0,10 EURUSD a 1,20549 effettuata(in base all'ordine #2)

FH 0 19:36:56.666 Operazione 2015.01.02 03:00:00 eseguita [#2 comprare 0.10 EURUSD a 1.20549]

OG 0 19:36:56.666 Trade 2015.01.02 03:00:00 ordine eseguito buy 0.10 at 1.20549 [#2 buy 0.10 EURUSD at 1.20549]

FO 0 19:36:56.670 demo (EURUSD,D1) 2015.01.02 03:00:00 Il metodo Buy() è stato eseguito con successo. Codice di ritorno=10009 (eseguito a 1,20549)

NM 2 19:37:15.823 Storia NZDUSD 2016.09.21 23:01:00: rilevata storia corrotta (s:-73370, o:73433, h:+48, l:-123, c:-117 -- tv:63, rv:11250111)

JF 2 19:37:15.823 Cronologia NZDUSD 2016.09.21, trovato contenitore errato, deve essere risincronizzato

LQ 2 19:37:16.106 Errore storico del tester 9 in una funzione non definita

OH 2 19:37:16.106 Il tester si è fermato allo 0% dell'intervallo di test con l'errore '20 NZDUSD'.


Per favore, ditemi cosa c'è che non va e come posso risolvere questo problema?