Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Potete dirmi se è possibile implementare questa costruzione da MQL4 utilizzando m_Trade.PositionModify (m_Trade è un membro della classe CTrade)?
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:
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:
Grazie in anticipo per il vostro aiuto.
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())
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.
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:
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.
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:
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?