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
Questo è quello che ho ottenuto. Per favore, ditemi cosa c'è che non va. Grazie in anticipo!
Ciao!
Scrivo qui perché sembra che non ci sia nessuno su mq4.
Puoi dirmi cosa sto sbagliando? L'opzione 2 non funziona.
Salve, per favore aiutatemi a scrivere una funzione in MT4. Conosco il saldo del mio conto, so quante operazioni si apriranno (per esempio 9), conosco il rischio (per esempio 3% di AccountBalance), ho bisogno di calcolare un lotto per la prima operazione, se ogni lotto successivo sarà raddoppiato e tutte le operazioni si sovrapporranno.
Questo è quello che ho ottenuto. Per favore, ditemi cosa c'è che non va. Grazie in anticipo!
Ciao!
Scrivo qui, perché sembra che non ci sia nessuno su mq4.
Puoi dirmi cosa sto sbagliando? L'opzione 2 non funziona.
Evidenziato: ci dovrebbe essere un'assegnazione - "=" e hai un confronto - "==".
Ciao a tutti!
Sto imparando a scrivere robot in mt4, ho deciso di iniziare con le opzioni binarie. Sto scrivendo un semplice EA, ma il compilatore genera un sacco di avvertimenti, non riesco a capirlo (
Aiuto: "Oh MQL4 Guru" =))))))
Grazie in anticipo).
Ecco il codice per l'EA.
//+------------------------------------------------------------------+
//|Bolinger_Bands_traider.mq4 |
//|Copyright 2017, Penrov Nikolay |
//|vk.com/buzamonolit |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Petrov Nikolay"
#proprietà link "vk.com/buzamonolit"
#proprietà versione "1.00"
#proprietà rigorosa
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto|
//+------------------------------------------------------------------+
extern int Bolinger_Bands = 20; // periodo di Bollinger Band
extern double Delta = 0.0003; // A quale distanza aprire l'ordine
string Symb; // Nome dello strumento finanziario.
int Total; // numero di ordini
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto|
//+------------------------------------------------------------------+
int init()
{
//----
Initialize_Objects(0);
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperta|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto|
//+------------------------------------------------------------------+
int start()
{
//----
doppio prezzo = Bid;
doppio CurrBol_High = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_UPPER, 0);
doppio CurrBol_Low = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_LOWER, 0);
doppio PriceBol_High = prezzo - CurrBol_High;
doppio PriceBol_Low = prezzo - CurrBol_Low;
datetime NextClose = Time[0] + Period()*60*2;
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;
int err;
// Conteggio degli ordini
Symb=Symbol();// Nome della pinna.simbolo(); // simbolo(); // simbolo(); // icona d'ordine(); // simbolo().
Totale=0;// Numero di ordini
for(int i=1; i<=OrdersTotal(); i++) // ciclo degli ordini
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Se c'è un prossimo
{// Analisi degli ordini:
if (OrderSymbol()!=Symb)continue; // Non è il nostro strumento finanziario
se (OrderType()>1)// Abbiamo un ordine in sospeso
{
Alert("Ordine in sospeso rilevato. Expert Advisor non funziona;)
ritorno(0);// Exit()
}
Totale++;// Contro mercato. ordine
se (Totale>1)// Non più di un ordine
{
Alert("Diversi ordini a mercato. Expert Advisor non funziona");
ritorno(0);// Exit()
}
}
}
ObjectSetText("Obj_Label", "TF" + Period() + ", " + DoubleToStr(price, 5) + ", tick " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10, "Arial", DarkGreen );
ObjectSetText("Obj_Label2", "Ordini:" + Totale + ", delta " + DoubleToStr(Delta,5) + ", distanza da MA:" + DoubleToStr(PriceBol_High, 5), 10, "Arial", DarkGreen );
ObjectSetText("Obj_Label3", "Ordini: " + Totale + ", Delta " + DoubleToStr(Delta,5) + ", distanza da MA:" + DoubleToStr(PriceBol_Low, 5), 10, "Arial", DarkGreen );
// analisi dei prezzi e apertura degli ordini
se ((MathAbs(PriceBol_Low) < Delta) && (prezzo > CurrBol_Low) && (Open[0] > CurrBol_Low+Delta) && (Totale<1))
{
if (OrderSend(Symbol(), OP_BUY, 1.00,Bid , 3, 0, 0, "BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Green) >0) Print ("Opened OK");
else
{
err=GetLastError();
Stampa("errore(",err,"));
ritorno(0);
}
Print ("CALL @ " + prezzo + " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
se ((MathAbs(PriceBol_High) < Delta) && (prezzo < CurrBol_High) && (Open[0] < CurrBol_High-Delta) && (Totale<1))
{
if (OrderSend(Symbol(), OP_SELL, 1.00,Bid , 3, 0, 0, "BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Red) > 0) Print ("Opened OK");
else
{
err=GetLastError();
Stampa("errore(",err,"));
ritorno(0);
}
Print ("PUT @ " + prezzo + " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
//----
ritorno(0);
}
//+------------------------------------------------------------------+
int Initialize_Objects(int Win) // Fie dell'utente
{// .creazione di oggetti
ObjectCreate("Obj_Label",OBJ_LABEL, Win, 0,0); // creazione dell'oggetto
ObjectSet("Obj_Label", OBJPROP_CORNER, 0); // Legare a un angolo
ObjectSet("Obj_Label", OBJPROP_XDISTANCE, 13); // coordinata X
se (Win==0)
ObjectSet("Obj_Label",OBJPROP_YDISTANCE, 15);//Coordinata Y
else
ObjectSet("Obj_Label",OBJPROP_YDISTANCE,15);//Coordinata Y
ObjectCreate("Obj_Label2",OBJ_LABEL,Win, 0,0); // creazione dell'oggetto
ObjectSet("Obj_Label2",OBJPROP_CORNER, 0); // Binding a un angolo
ObjectSet("Obj_Label2", OBJPROP_XDISTANCE, 13); // coordinata X
se (Win==0)
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);//Coordinata Y
else
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);//Coordinata Y
ObjectCreate("Obj_Label3",OBJ_LABEL, Win, 0,0); // Crea oggetto
ObjectSet("Obj_Label3",OBJPROP_CORNER, 0); // Legame con un angolo
ObjectSet("Obj_Label3", OBJPROP_XDISTANCE, 13); // coordinata X
se (Win==0)
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);//Coordinata Y
else
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);//Coordinata Y
ritorno(0);// Uscire dall'utente.funzione
}
Ecco gli avvertimenti. Non riesco a capire che cosa non gli piaccia (vedi "La mia famiglia").
possibile perdita di dati a causa della conversione del tipo Bolinger_Bands_traider.mq4 51 24
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 76 35
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 76 227
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 77 43
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 78 43
conversione implicita da 'string' a 'number' Bolinger_Bands_traider.mq4 85 71
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 93 23
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 93 91
conversione implicita da 'string' a 'number' Bolinger_Bands_traider.mq4 99 72
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 107 23
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 107 91
0 errore(i), 11 avviso(i), tempo di compilazione: 204 msec 1 12
Elementare. L'errore è la funzioneGetLots(). L'intera funzione.
Forse puoi dirmi come scriverlo correttamente. Volevo calcolare usando il loop forzando brute da max lot.
Forse puoi dirmi come scriverlo correttamente. Volevo calcolare utilizzando un ciclo provando dal lotto massimo.
Dov'è la logica? Si imposta il lotto massimo consentito per il primo ordine e poi lo si aumenta per ogni ordine successivo. Non vi sembra, per usare un eufemismo, poco sensato?
Inoltre, si diminuisce il lotto del primo ordine nel ciclo usando qualche metodo totalmente incomprensibile, mentre i lotti degli altri ordini, che sono stati "calcolati" prima, rimangono invariati, e questi valori non vanno oltre i limiti di questa funzione in nessun modo. Cosa fanno allora?
Senza contare che il ciclo di incremento non può essere un numero reale, deve essere un contatore, un intero. Ma voi impostate il valore del lotto come contatore e sottraete uno da esso ad ogni iterazione. Questo è un grande errore, un errore molto grave.
Chiarite prima la logica nella vostra mente e poi cercate di implementarla nel vostro codice.
Ma ecco gli avvertimenti. Non riesco a capire che cosa non gli piace (vedi sopra).
possibile perdita di dati a causa della conversione del tipo Bolinger_Bands_traider.mq4 51 24
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 76 35
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 76 227
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 77 43
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 78 43
conversione implicita da 'string' a 'number' Bolinger_Bands_traider.mq4 85 71
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 93 23
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 93 91
conversione implicita da 'string' a 'number' Bolinger_Bands_traider.mq4 99 72
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 107 23
conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 107 91
0 errore(i), 11 avviso(i), tempo di compilazione: 204 msec 1 12
Emettere una riga con il numero 51, poiché non c'è un conteggio qui per capire l'errore"possibile perdita di dati a causa della conversione del tipo Bolinger_Bands_traider.mq4 51 24"
Il resto: "conversione implicita da 'numero' a 'stringa' Bolinger_Bands_traider.mq4 107 91
tradurre i valori numerici in una stringa di testo dove creiamo l'oggetto - una stringa di testo, per esempio
periodo()
dovrebbe essere
DoubleToString(Periodo(),0)
tradurre i valori numerici in una stringa di testo dove creiamo un oggetto stringa di testo, per esempio
periodo()
dovrebbe essere
DoubleToString(Periodo(),0)
Da quando il periodo è un tipo Double?