![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
grazie per la tua risposta Robert
una tale dashboard sarebbe perfetta, ma non ne ho trovata una con bb squeeze, e non ho idea di come cambiare le dashboard esistenti per rilevare su bb squeeze
la mia idea era molto semplice e assomigliava a questa:
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int USDCHF, GBPUSD, EURUSD, AUDUSD;
double upperBB_USDCHF = iBands("USDCHF", 0, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, Current + 0);
double upperKC_USDCHF = iCustom("USDCHF", 0, "Keltner Channels", 20, 0, Current + 0);
double lowerBB_USDCHF = iBands("USDCHF", 0, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, Current + 0);
double lowerKC_USDCHF = iCustom("USDCHF", 0, "Keltner Channels", 20, 2, Current + 0);
if(upperBB_USDCHFlowerKC_USDCHF)
Comment(": BollingerSqueeze for USDCHF");
return(0);
}
//+------------------------------------------------------------------+
che è solo per diverse coppie diverse allora, ma come ho detto il 'Commento' si aggiorna tutto il tempo
edit: ok l'ho aggiustato, non serve più aiuto![](https://c.mql5.com/forextsd/smiles/smile.png)
Ciao Mladen n tutti gli altri membri,
Faccio trading di pattern grafici con "big candle move" (Open[0]-Close[0] > 32 pips o viceversa) e faccio trading di eurusd (H1 su FXOpen <--- la dimensione della candela più accurata n pattern)...
Quindi, non c'era assolutamente nessun indicatore. Solo filosofia di trading.
Cerco di codificare un EA su questa logica ma penso che manchi qualcosa... per favore aiutatemi!!!
Cosa significa "qualcosa che manca"?
-voglio che prima che la "grande candela" accada... il sistema calcola le ultime 4 candele < 20pips (apertura - chiusura o viceversa) per ogni candela.
Mentre... quello che è successo è il mio codice mql4 non legge le ultime 4 candele prima della grande candela... sono così confuso...
Quello che dovrebbe accadere è:
1. Tempo per la grande candela :-
- 3pm,4pm,5pm(London Open) ..n.. 8pm,9pm,10pm(US Open) <---- tutti i tempi dati come io malaysian, in modo da passare il computer a GMT 8.00++
2. Grande dimensione della candela :-
- 32 pips n sopra (se sideway prima sono 20 pips n sotto)
- 42 pips n sopra (se sideway prima sono 20 pips n sopra)
3. Mercato laterale :-
- sotto i 50 pip per le ultime 4 ore minimo n deve avere un colore diverso.
4. Mercato nullo o pericoloso (market cancel): <--- nessun trade se si verifica questa condizione di mercato
1. Sideway prima dell'apertura di Londra B,B,B,B al rialzo o S,S,S,S al ribasso. <--- B,B,B,B = Candele Compra, compra, compra, compra... continuamente
2. Grande chiusura di candela a zon massimo giornaliero. <---- 75 pips minimo alto basso
3. La grande candela si verifica alle 10 di sera. <----- GMT 8++ o ora della Malesia
4. Grande candela troppo grande e più di 80 pips.
5. Ci sono candele più di 50 pip prima dell'apertura di Londra.
6. La forma di un mercato al rialzo nella sessione di Tokyo e grande candela al rialzo nell'apertura di Londra (viceversa per il ribasso)
I problemi di codifica allegano :-
extern double trigger = 32;
extern double sideway = 20;
extern int hour1 = 6;
extern int hour2 = 7;
extern int hour3 = 8;
extern int hour4 = 9;
extern int hourCB = 10;
extern int hourTRADE = 11;
extern int TradeTimeStart = 0;
extern int TradeTimeEnd = 23;
//---Variables
double currentPrice = 0.00000;
static datetime barStart;
string openTrades = "none";
int ticket;
int i = 0;
double lotSize;
double CBB = 0;
double CBS = 0;
double CBBT;
double CBST;
double PreviousCBB;
double PreviousCBS;
double CS1B;
double CS2B;
double CS3B;
double CS4B;
double CS5B;
double CS6B;
double CS1S;
double CS2S;
double CS3S;
double CS4S;
double CS5S;
double CS6S;
double CS1BT;
double CS2BT;
double CS3BT;
double CS4BT;
double CS1ST;
double CS2ST;
double CS3ST;
double CS4ST;
double PreviousCS1B;
double PreviousCS2B;
double PreviousCS3B;
double PreviousCS4B;
double PreviousCS1S;
double PreviousCS2S;
double PreviousCS3S;
double PreviousCS4S;
double GroupSW1B;
double GroupSW2B;
double GroupSW3B;
double GroupSW4B;
double GroupSW5B;
double GroupSW6B;
double GroupSW1S;
double GroupSW2S;
double GroupSW3S;
double GroupSW4S;
double GroupSW5S;
double GroupSW6S;
string permit = "suspended";
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start(){
CBB=(Close[1]-Open[1])/Point;
CBS=(Open[1]-Close[1])/Point;
CBBT=(hourCB==Hour());
CBST=(hourCB==Hour());
PreviousCBB = (CBB == CBBT);
PreviousCBS = (CBS == CBST);
CS1B=(Close[7]-Open[7])/Point;
CS2B=(Close[6]-Open[6])/Point;
CS3B=(Close[5]-Open[5])/Point;
CS4B=(Close[4]-Open[4])/Point;
CS5B=(Close[3]-Open[3])/Point;
CS6B=(Close[2]-Open[2])/Point;
CS1S=(Open[7]-Close[7])/Point;
CS2S=(Open[6]-Close[6])/Point;
CS3S=(Open[5]-Close[5])/Point;
CS4S=(Open[4]-Close[4])/Point;
CS5S=(Open[3]-Close[3])/Point;
CS6S=(Open[2]-Close[2])/Point;
CS1BT=(hour1==Hour());
CS2BT=(hour2==Hour());
CS3BT=(hour3==Hour());
CS4BT=(hour4==Hour());
CS1ST=(hour1==Hour());
CS2ST=(hour2==Hour());
CS3ST=(hour3==Hour());
CS4ST=(hour4==Hour());
PreviousCS1B = (CS1B == CS1BT);
PreviousCS2B = (CS2B == CS2BT);
PreviousCS3B = (CS3B == CS3BT);
PreviousCS4B = (CS4B == CS4BT);
PreviousCS1S = (CS1S == CS1ST);
PreviousCS2S = (CS2S == CS2ST);
PreviousCS3S = (CS3S == CS3ST);
PreviousCS4S = (CS4S == CS4ST);
GroupSW1B = (CS3B<sideway&&CS4S<sideway&&CS5B<sideway&&CS6S=trigger);
GroupSW1S = (CS3S<sideway&&CS4B<sideway&&CS5S<sideway&&CS6B=trigger);
currentPrice = iClose(NULL,0,0);
Comment("Price Continuation\n",
"Status: ",status()
);
//----Trade Algorithm
//trade hours value...
if(TradeTimeStart <= Hour() && Hour() <= TradeTimeEnd){
if(openTrades == "none" && permit == "approved"){
requestLongOrder();
requestShortOrder();
}
else{
requestPermit();
}
}
if(openTrades == "long"){
manageLongTrade();
}
if(openTrades == "short"){
manageShortTrade();
}
return(0);
}
//---FUNCTIONS---
//--
void requestLongOrder(){
if(hourTRADE==Hour() && GroupSW1B){
//--
Lots = CalcLots ();
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,currentPrice-stopLoss,currentPrice+takeProfit,"My order ",06010,0,Green);
if(ticket<0){
//add email/sms alert here with GetLastError();
}
if(ticket>0){
openTrades = "long";
permit = "suspended";
}
}
}
void requestShortOrder(){
if(hourTRADE==Hour() && GroupSW1S){
//--
Lots = CalcLots ();
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,currentPrice+stopLoss,currentPrice-takeProfit,"My order ",06010,0,Red);
if(ticket<0){
//add email/sms alert here with GetLastError();
}
if(ticket>0){
openTrades = "short";
permit = "suspended";
}
}
}
* cosa dovrebbe accadere come schermata allegata.
Per favore aiutatemi...
Grazie...
saluti,
crexskingCiao Crexsking,
L'unica cosa che mi viene in mente è che potresti aver bisogno di convertire per broker a 5 cifre, dopo l'avvio metti qualcosa come questo
doppio pipMultiplier = 1; (prima dell'avvio)
int start()
{
se (cifre==3 || cifre==5)
pipMultiplier = 10;
altrimenti pipMultiplier = 1;
E poi dopo ogni punto qualcosa come questo Punto*pipMultiplier.
Come sono stati risolti i commenti?
grazie per la tua risposta Robert
una tale dashboard sarebbe perfetta, ma non ne ho trovata una con bb squeeze, e non ho idea di come cambiare le dashboard esistenti per rilevare su bb squeeze
la mia idea era molto semplice e assomigliava a questa:
========
che è solo per diverse coppie diverse, ma come ho detto il 'Commento' si aggiorna tutto il tempo
edit: ok ho risolto, non serve più aiutoCiao Deorn,
Mi fa piacere sapere che hai risolto la tua sfida. Ti interessa condividere cosa hai fatto per correggere il "commento" che si aggiorna...?
Divertiti con la tua codifica...!
Robert
Ciao Deorn,
È bello sapere che hai risolto la tua sfida. Ti va di condividere cosa hai fatto per correggere il "commento" che rinfresca...?
Divertiti con la tua codifica...!
RobertL'ho fatto con 'objectcreate' come hai detto tu
L'ho realizzato per i timeframe da M5 a mensile in 10 coppie diverse:
Keltner Channels è richiesto con il nome esatto 'Keltner Channels', ho scelto le impostazioni 20 con Fattore 1.5
entrambi sono due indicatori normali
Io sceglierei una finestra vuota in cui metterlo
e scusate la brutta programmazione, è il mio primo indicatore, ma fa il suo lavoro
saluti
Ciao Crexsking,
L'unica cosa che mi viene in mente è che potresti aver bisogno di convertire per broker a 5 cifre, dopo l'avvio metti qualcosa come questo
doppio pipMultiplier = 1; (prima dell'avvio)
int start()
{
se (cifre==3 || cifre==5)
pipMultiplier = 10;
altrimenti pipMultiplier = 1;
E poi dopo ogni punto qualcosa del genere Point*pipMultiplier.Ciao mrtools n grazie...
Lo farò ma prima posso chiedere... qual è la relazione per convertirlo con broker a 5 cifre?
Voglio dire ... prima di questo, il sistema non può riconoscere la candela toro o orso nelle ultime 4 candele del mercato laterale.
Se metto questo codice, il sistema lo riconoscerà?
Scusate il mio povero inglese...
saluti,
crexsking
Ciao mrtools n grazie...
Lo farò, ma prima di questo posso chiedere... qual è la relazione per convertirlo con broker a 5 cifre?
Voglio dire... prima di questo, il sistema non può riconoscere la candela toro o orso nelle ultime 4 candele del mercato laterale.
Se metto questo codice, il sistema lo riconoscerà?
Scusate il mio povero inglese...
saluti,
crexskingCrexsking, lo porterà in pip quindi se per esempio hai .91135 per l'apertura e .90685 per la chiusura la differenza è .0045 se sei su un broker a 5 cifre il punto sarebbe uguale a 450 perché è diviso per .00001 ma se usi la conversione lo rende correttamente 45 pip, perché stai dividendo per .0001 o .00001 x 10. E per quanto riguarda il riconoscimento delle candele toro o orso davvero non posso dire perché non vedo nient'altro di sbagliato nel tuo codice.
Codifica del grande giocatore... aiuto per favore...
\\---- Modificato
Ok fatto...
Problema risolto.
saluti,
crexsking
Bisogno di aiuto
Ciao per tutti i maestri di codifica, ho bisogno del vostro aiuto per favore :
Che cosa circa la codifica se voglio creare linee orizzontali i limiti superiori e inferiori sul gruppo della candela (chiudere - aprire) è piccolo in valore. Valore (close - open)*100000 = senza polarità e sempre positivo. Il mio numero di candela di contenuto esterno.
Esempio:
extern int (close - open)*100000 = 10; // La sua media (close - open) <= 10
extern int Numero di candela massimo = 3;
"Horizontal line upper limit" = preso dal più alto open/close inerente al gruppo
"Linea orizzontale limite inferiore" = presa dalla più alta apertura/chiusura inerente al gruppo
I miei migliori saluti,
grazie
...
Temo di non capire esattamente quello che vuoi dire. quindi rispondendo solo una parte della tua domanda.
Se moltiplichi la differenza di un simbolo a 5 cifre su un broker a 5 cifre con 100000 allora otterrai il valore desiderato ma se il simbolo è per esempio uno dei cross JPY otterrai valori che superano di gran lunga quei valori. Inoltre, su un broker a 4 cifre avrete anche valori più grandi. Per evitare questo il modo migliore è quello di calcolare la differenza in pip. Questo è il modo in cui puoi farlo:E sarà sempre in pip indipendentemente dal simbolo o broker
Come minimo e massimo puoi trovare i valori minimo e massimo di un intervallo di barre con un codice come questo (questo esempio è impostato per guardare in un intervallo di 3 barre come tu stai parlando) :Ciao per tutti i master coding, ho bisogno del vostro aiuto per favore :
Che dire di codificarlo se voglio creare linee orizzontali i limiti superiore e inferiore sul gruppo della candela (chiudere - aprire) è piccolo in valore. Valore (close - open)*100000 = senza polarità e sempre positivo. Il mio numero di candela di contenuto esterno.
Esempio:
extern int (close - open)*100000 = 10; // La sua media (close - open) <= 10
extern int Numero di candela massimo = 3;
"Horizontal line upper limit" = preso dal più alto open/close inerente al gruppo
"Linea orizzontale limite inferiore" = presa dalla più alta apertura/chiusura inerente al gruppo
I miei migliori saluti,
GrazieTemo di non capire esattamente cosa intendi. quindi rispondendo solo ad una parte della tua domanda. Se moltiplichi la differenza di un simbolo a 5 cifre su un broker a 5 cifre con 100000 allora otterrai il valore desiderato ma se il simbolo è per esempio uno dei cross JPY otterrai valori che superano di gran lunga quei valori. Inoltre, su un broker a 4 cifre avrete anche valori più grandi. Per evitare questo il modo migliore è quello di calcolare la differenza in pip. Questo è il modo in cui puoi farlo: :
Grande sorpresa sono molto felice che tu risponda alla mia domanda Maestro Mladen,
Ma scusa sono ancora confuso, daresti la codifica completa? Valore * 100000 intendevo essere facile nelle letture, non 0,0002 (4 cifre dietro la virgola), ma se avete un modo più semplice, seguirò il tuo modo. In sostanza, quando trovato tre candele (la zona di equilibrio o acquirenti = venditori o zona laterale modo, ogni TF suo diverso numero di candele) che è piccolo (il suo valore è preso dalla differenza tra Close - Open) voglio disegnare una linea orizzontale proprio come l'immagine che ho caricato. Così conosco la domanda e l'offerta nel grafico con l'aiuto della linea. O c'è un tale indicatore che avete?
I miei migliori saluti,
Grazie Maestro Mladen