[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 69
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Per favore, qualcuno guardi il mio post precedente (a pagina 67). Non riesco a trovare l'errore - gli ordini pendenti non vengono impostati.
Non c'è nessun errore. Dovresti stare più attento.
Non c'è nessun errore. Devi stare più attento
No, no, no, no. Stai guardando il post sbagliato. Ce n'è un altro appena sotto :)). La versione che avete controllato non specifica il livello dal prezzo corrente (solo il prezzo corrente) al quale il pendolo dovrebbe essere impostato. Grazie per il vostro feedback.
No, no, no. Avete guardato un post sbagliato. Ce n'è un altro appena sotto :)). La versione che hai controllato non contiene il livello dal prezzo corrente (solo il prezzo corrente), al quale il pennacchio dovrebbe essere impostato. Grazie per il vostro feedback.
Qualcosa con la chiamata alla funzione OPENORDER() o con la funzione stessa.
Funziona così
se (BUYSTOP)
{
se (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); altrimenti TP=0;
se (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); altrimenti SL=0;
int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
}
Qualcosa con la chiamata alla funzione OPENORDER() o con la funzione stessa.
Funziona così
se (BUYSTOP)
{
se (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); altrimenti TP=0;
se (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); altrimenti SL=0;
int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
}
Aaaaaaaaah!!! Dei del computer!!! Ci sono passato dieci volte! Perché non funziona? La cosa principale è l'apertura del mercato. Quelli in sospeso sono scritti esattamente sullo stesso principio. Cosa manca? :)))))))
Si prega di consigliare come inserire TrailingStopFrCnSAR_v2 in Expert Advisor, che è descritto nel tutorial?
Come faccio a disabilitare l'order tracking, in modo che funzioni quando un altro EA mette un ordine in sospeso o apre un ordine?
Urrrrrrra!!!!!!!! Trovato il bug!
Se qualcuno è interessato, ecco una versione funzionante:
#property copyright "Copyright © 2010, Khlystov Vladimir"
#p
roperty link "cmillion@narod.ru"
#proprietà show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0; //livello di esposizione di SL, se 0, SL non è esposto
extern int int takeprofit = 0; //t livello TP, se 0, TP non è esposto
extern int int Magic = 123456; //numero di un ordine
extern bool BUY = false; //aprire ordine BUY
extern bool SELL = false; //aprire un ordine SELL
extern bool BUYSTOP = false; //aprire ordine BUYSTOP
extern bool SELLSTOP = false; //aprire l'ordine SELLSTOP
extern double Lot = 0.1; // volume dell'ordine
extern int slippage = 3; //la massima deviazione di prezzo permessa per gli ordini a mercato
extern int DistanceSet = 20; //distanza di mercato
//--------------------------------------------------------------------
doppio SL,TP;
//--------------------------------------------------------------------
int start()
{
se (COMPRA)
{
se (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); altrimenti TP=0;
se (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); altrimenti SL=0;
OPENORDER ("Comprare");
}
se (VENDERE)
{
se (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); altrimenti TP=0;
se (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); altrimenti SL=0;
OPENORDER ("Vendere");
}
se (BUYSTOP)
{
se (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); altrimenti TP=0;
se (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); altrimenti SL=0;
OPENORDER ("Buy Stop");
}
se (SELLSTOP)
{
se (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); altrimenti TP=0;
se (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); altrimenti SL=0;
OPENORDER ("Sell Stop");
}
ritorno(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int errore,err;
mentre (vero)
{ error=true;
se (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
se (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,",Magic,0);
se (ord=="Buy Stop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
se (ord=="Sell Stop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,",Magic,0);
se (errore==-1) //fallimento
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
se (errore || err >10) ritorno;
}
ritorno;
}
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
interruttore ( err )
{
caso 1: ritorno;
caso 2: Alert("Nessuna connessione al server commerciale ",Symbol());ritorno;
caso 3: Alert("Errore parametri errati ",Symbol()); ritorno;
caso 130: Alert("Errore chiusura biglietto si ferma ",Symbol());ritorno;
caso 134: Alert("Non ci sono abbastanza soldi ",Symbol());ritorno;
caso 146: Alert("Error Trade Subsystem is busy ",Symbol());return;
caso 129: Alert("Errore Prezzo errato ",Simbolo()); ritorno;
caso 131: Alert("Error Incorrect volume ",Symbol()); ritorno;
caso 4200:Alert("Errore L'oggetto esiste già ",Symbol());ritorno;
default: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------
Grazie mille a tutti quelli che hanno partecipato alla discussione!!! Da nessuna parte senza di te! :)))))
Urrrrrrra!!!!!!!! Trovato l'errore!
Un enorme grazie a tutti coloro che hanno partecipato alla discussione!!! Da nessuna parte senza di te! :)))))
hai ancora un errore nel tuo codice.
Ricorda: gli stop e i take negli ordini pendenti non vengono contati dal prezzo corrente, ma dal prezzo di apertura dell'ordine.
AIUTO! Per favore ditemi, se chiudo parte di una posizione (ad esempio ordine per 1 lotto, e chiudo 0,5 lotti) OrderClose ticket dovrebbe cambiare? Il mio tester dice che lo fa... Come evitarlo? Qui sotto c'è un pezzo di codice di chiusura...
1 2011.01.31 06:57 vendere 1 2.55 1.36177 0.00000 0.00000 0.00 10000.00
2 2011.01.31 08:10 chiudere 1 0.51 1.36039 0.00000 0.00000 70.38 10070.38
3 2011.01.31 08:10 vendere 2 2.04 1.36177 0.00000 0.00000 0.0000 10070.38
4 2011.01.31 08:10 chiudere 2 0.40 1.36038 0.00000 0.00000 55.60 10125.98
5 2011.01.31 08:10 vendere 3 1.64 1.36177 0.00000 0.00000 0.00000 10125.98
Un'altra domanda: voglio dividere il mio ordine in 4 parti e chiudere ciascuna di esse quando Cls_S==true si attiva. Ho cercato di usare il contatore... Non funziona...
Qualcuno può darmi un'idea?
Grazie in anticipo!!!!
if (Tip==1 && ((Cls_S0==true&&TotClS==0)||(Cls_S1==true&&TotClS==1)
||(Cls_S2==true&&TotClS==2)||(Cls_S3==true&&TotClS==3)) // Un ordine Sell è aperto.
{ // e c'è un criterio per chiuderlo
Alert("Attempting to close 0.2 Lot Sell ",Ticket,". In attesa di risposta...");
RefreshRates(); // Aggiorna i dati
Ans=OrderClose(Ticket,LotCt,Ask,5);
if (Ans==true) // Ha funzionato :)
{
TotClS++;
Alert ("Closed 0.2 Lot Sell ",Ticket);
break; // Exit from closed loop
}
if (Fun_Error(GetLastError())==1) // Error handling
continue; // Retry
return; // Exit from start()
}
break; // Exit while
Ho fatto un disegno temporaneo del buffer flag[] - è vuoto, ma perché? Dov'è il mio errore?
L'ho solo corretto un po', in modo che si vedesse qualcosa.
- Ho messo l'indicatore in una finestra separata, poi si può rimettere
- array macd[] era sospeso in aria, l'ha reso un indicatore, ha aumentato la precisione
- fissate la vostra condizione complessa da aprire, mettetene una semplice per la regolazione
- ha cambiato la condizione per la bandiera, quindi almeno funziona.
Poi si possono introdurre gradualmente le condizioni, si vedrà subito dov'è il bug.