Come faccio a far filtrare l'indicatore al posto dell'avviso? - pagina 4

 
Aaragorn:
L'ho ridotto a questo...ma aspetta...

se questo è solo usando la semplice media mobile di questa barra moltiplicata per 3,5 per trovare un punto alto. Come è possibile che il punto possa mai raggiungerlo? Il valore della linea non viene calcolato dalla stessa barra che dovrebbe toccarlo per segnalarlo? Come la barra sale, così fa la linea di confine?

Lamedia mobile se calcolata da più di 1 barra quindi la linea può essere 1 valore e il prezzo un altro

 
elihayun:
Se vuoi sapere se la linea superiore è vicina al prezzo, un modo per scoprirlo è se la differenza tra loro è piccola (diciamo 2 punti).

Non mi interessa (il che non è una buona idea) se il prezzo è sotto la linea o sopra la linea. Per me 2 punti di distanza è tutto ciò che serve. quindi la differenza è

superiore - Alto vi darà la differenza ma non in punti (il suo qualcosa come 0,0004 o -0,0004). Per essere sicuri che la diff sia positiva stiamo usando la finzione MathAbs che restituisce il valore assoluto (positivo). Ora dobbiamo controllare se è meno di 2 punti. La parola riservata Point restituirà il valore quando il prezzo sale di 1 pip. È diverso per ogni coppia.

Mettete tutto insieme

se (MathAbs(upper - High) < 2*Point) significa se la differenza è inferiore a 2 pip, e per noi è abbastanza vicina

In realtà usare High non va bene, perché l'High forse è sopra, ma il prezzo corrente è lontano. Dobbiamo usare Ask invece di High (nell'indicatore dobbiamo usare Close[x])

Per essere sicuri che il prezzo sia sopra la linea possiamo fare così

if ((Ask > upper) && (Ask - upper < 2 * Point))

.....(alert or open a trade)

[/PHP]

sei molto bravo a rispondere a così tante mie domande che spero di non sfinirti Sono desideroso di imparare.

Capisco il valore assoluto. Mi chiedo cosa cambierebbe per usare l'ask invece del close? Non sarebbe bene usare il close? o farebbe molta differenza? l'unica cosa che ancora mi confonde è il lato 2 * punto della seconda condizione. Il punto non sarebbe moltiplicato per 2? Sto interpretando male il simbolo '*' o è il simbolo di moltiplicazione?

Vedo che ask-upper dà la differenza tra la linea superiore e il valore attuale di ask. ma moltiplicare il punto per 2? Non sono sicuro di cosa risulterebbe che potrebbe essere usato per la comparazione.

Potrei fare questo per consentire solo gli acquisti quando il segnale si verifica al di sotto della mia tolleranza di acquisto filtrata?

[php]

extern double longrange = 25; //--la vicinanza permessa per avvicinarsi alla linea superiore della banda prima di non permettere gli acquisti

extern double shortrange = 20; //--la vicinanza permessa per avvicinarsi alla linea della banda inferiore prima di impedire le vendite

// INGRESSO

if(total < 2 || isNewSumbol(Symbol()) //ho modificato anche la condizione if: era total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calcolare i Lots per la posizione coperta

if(isCrossed == 1 && Ask < upper-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

altrimenti

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Verde);

se(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordine BUY aperto : ",OrderOpenPrice());

}

else Print("Errore nell'apertura dell'ordine BUY: ",GetLastError());
 

Ti manca una cosa. Per capire il punto immagina questo

in USDJPY il prezzo è 114,95 e in EURUSD il prezzo è 1,2773

quindi in USDJPY Ask - upper sarà come : 114.95 - 114.93 = 0.02

e in EURUSD il prezzo sarà 1,2773 - 1,2771 = 0,0002

Entrambi sono 2 punti ma con una precisione diversa quindi in USDJPY dobbiamo moltiplicare 2 per 0.01 e in EURUSD dobbiamo moltiplicarlo per 0.0001 e in ogni coppia questo è esattamente ciò a cui il punto è uguale.

 
elihayun:
La media mobile è calcolata su più di 1 barra quindi la linea può essere 1 valore e il prezzo un altro

esattamente, come può essere una media di una sola barra?

//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = findAvg(back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg); [/PHP]

I don't see how this works....also the compiler say, 'findAvg' - function is not defined

it's looking for the shift value x which is zero so that is only going to be the current bar right? So what is it averaging?

ok let me see what might be...if i'm telling it to go 'back' 300 periods that is what it's averaging is 300 periods. ok i get it now i think....

now about the undefined function error? what do I do about that? just get rid of it as unnecessary?

[PHP]//----------channel filter

int x = 0;

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

double avg;

avg = (back, x);

double upper = middle2 + (3.5*avg);

double lower = middle2 - (3.5*avg);
 
elihayun:
Ti manca una cosa. Per capire la roba del punto immagina questo

in USDJPY il prezzo è 114,95 e in EURUSD il prezzo è 1,2773

quindi in USDJPY Ask - upper sarà come : 114.95 - 114.93 = 0.02

e in EURUSD il prezzo sarà 1,2773 - 1,2771 = 0,0002

Entrambi sono 2 punti ma con una precisione diversa, quindi in USDJPY dobbiamo moltiplicare 2 per 0,01 e in EURUSD dobbiamo moltiplicarlo per 0,0001 e in ogni coppia questo è esattamente ciò che Point è uguale a.

Ok, vedo il problema... quello che voglio fare è creare una barriera basata sulla vicinanza alle linee superiore e inferiore oltre la quale non saranno permessi scambi.

-Quindi prima ottengo il valore attuale della linea.

-poi aggiungo o sottraggo la distanza che voglio definire intollerabile al trading come un intero che considero 1=1 pip di movimento.

-Poi devo ottenere il valore di dove si trova il prezzo per ogni tick per fare la condizione di confronto

quindi questa linea dovrebbe essere qualcosa oltre a 'price_Typical'.

double middle2= iMA(NULL, 0, back, 0, MODE_SMA, PRICE_TYPICAL, x);// only used to calculate outer bands

Non sono sicuro di come evitare che le diverse precisioni causino un problema. Tutto quello che voglio fare è confrontare il movimento del prezzo rispetto al movimento della linea che specificherà 'non fare trading lungo sopra questo livello' o 'non fare trading corto sotto questo livello'.

Sono pronto per una pausa, il mio cervello è diventato una poltiglia.

 

PRICE_TYPICAL non ha niente a che fare con questo. puoi leggere a riguardo nella guida di MQL4

Tutto quello che dovete fare per trovare la differenza tra il prezzo e la linea è sottrarre uno dall'altro. Come ho detto, il problema è che a volte si ottiene 0,0006 e a volte si ottiene 0,06 e questo è il punto di risoluzione.

(Ora devo chiudere. Possiamo continuare domani)

 
elihayun:
Ti manca una cosa. Per capire la roba di Point immagina questo

in USDJPY il prezzo è 114,95 e in EURUSD il prezzo è 1,2773

quindi in USDJPY Ask - upper sarà come : 114.95 - 114.93 = 0.02

e in EURUSD il prezzo sarà 1,2773 - 1,2771 = 0,0002

Entrambi sono 2 punti ma con una precisione diversa quindi in USDJPY dobbiamo moltiplicare 2 per 0.01 e in EURUSD dobbiamo moltiplicarlo per 0.0001 e in ogni coppia questo è esattamente ciò a cui Point è uguale.

quindi il punto è come tracciare il movimento dei pip in ogni coppia indipendentemente dalla diversa precisione richiesta?

 
elihayun:
PRICE_TYPICAL non ha nulla a che fare con esso. si può leggere su di esso nella guida MQL4

Tutto quello che dovete fare per scoprire la differenza tra il prezzo e la linea è sottrarre uno dall'altro. Come ho detto, il problema è che a volte si ottiene 0,0006 e a volte si ottiene 0,06 e questo è il punto è risolvere.

(Devo chiudere ora. Possiamo continuare domani)

Grazie mille per la vostra pazienza e il vostro incoraggiamento

 

Questo è quello che ho fatto....

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v2", back, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v2", back, 2, 0);

// ENTRY

if(total < 2 || isNewSumbol(Symbol())) //I have modified the if condition too: it was total<1 (orBanAway aka cucurucu)

{

double HedgeLots = (HedgePercent/100)*Lots; //calculates the Lots for the hedged position

if(isCrossed == 1 && Ask < upLevel-longrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,HedgeLots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### ends here

return(0);

}

if(isCrossed == 2 && Ask > LowLevel + shortrange)

{

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

else

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,comment,MAGICMA,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

//###################################################################### the added code starts here

if(UseStopLoss)

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

else

ticket=OrderSend(Symbol(),OP_BUY,HedgeLots,Ask,3,0,Ask+TakeProfit*Point,comment,MAGICMA,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

//###################################################################### ends here

return(0);

}

return(0);

}

return(0);

}

return(0);

}

}

//+------------------------------------------------------------------+[/PHP]

this is what I got from the tester....

[PHP]2006.06.30 11:18:09 2006.06.06 14:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 12:14 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.06 10:26 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 22:47 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:09 2006.06.05 09:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 08:41 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:30 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:09 2006.06.05 07:29 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.02 19:55 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 11:18:08 2006.06.01 11:27 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 06:45 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 04:00 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 02:44 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:08 2006.06.01 00:37 Trend Bands v2 EURUSD,M30: Alert: EURUSD 30 reach lower edge

2006.06.30 11:18:00 2006.05.31 04:00 Trend Bands v2 EURUSD,M30: loaded successfully

2006.06.30 11:18:00 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 11:18:00 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; longrange=1; shortrange=1; back=30; TF=30;

2006.06.30 11:17:35 EMA_CROSSv5: loaded successfully

il rapporto mostra che ha ottenuto le impostazioni ma si è cancellato....

ovviamente non permette le transazioni, ma TUTTE? Lo trovo difficile da credere quando ho solo impostato gli intervalli lunghi e corti a 1! Sicuramente ci sono stati alcuni segnali di trading all'interno di quel range? Non credo che questo stia facendo ciò che volevo.

File:
mac5.htm  5 kb
 

Ho cambiato l'indicatore delle bande di tendenza in modo che sia più flessibile

extern int period = 34;

extern int factor = 8;

avg = findAvg(period, x);

upper[x] = middle2 + (factor*avg);

lower[x] = middle2 - (factor*avg);[/PHP]

then i did this to the EA

//---- Trend Bands v2 and Filter Parameters

extern double back = 300; //--how many periods back for the custom indicator to average

extern double bandwidth = 6; //--how wide the trend bands are

extern double TF = 30; //--which bar period for the custom indicator to use

//----------channel filter

double upLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 0, 0);

double LowLevel = iCustom(NULL,TF, "Trend Bands v3", back, bandwidth, 2, 0);

I got this from the tester...(slightly abbreviated report)..

[PHP]2006.06.30 12:10:38 2006.06.29 23:59 Trend Bands v3 EURUSD,M30: removed

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:12 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:04 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:03 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 20:00 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 20:00 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:59 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:32 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:25 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:21 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:20 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:09 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:08 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 19:06 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:35 Trend Bands v3 EURUSD,M30: Alert: EURUSD 30 reach upper edge

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:38 2006.06.29 18:16 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening BUY order : 131

2006.06.30 12:10:38 2006.06.29 18:15 EMA_CROSSv5 EURUSD,M5: Error opening SELL order : 131

2006.06.30 12:10:37 2006.06.29 00:00 Trend Bands v3 EURUSD,M30: loaded successfully

2006.06.30 12:10:37 EMA_CROSSv5 EURUSD,M5: Tester comment: ----------------------------------------

TakeProfit=10 | TrailingStop=20 | StopLoss=20 | UseStopLoss=False

----------------------------------------

immediate_trade=True | reversal=False

----------------------------------------

Lots=1 | MM=True | Risk=10%

----------------------------------------

2006.06.30 12:10:37 EMA_CROSSv5 inputs: TakeProfit=10; TrailingStop=20; StopLoss=20; ShortEma=1; LongEma=5; Lots=1; HedgePercent=1; StartHour=0; StopHour=23; Risk=10; MAGICMA=20060301; back=300; bandwidth=6; TF=30;

Ho spostato la larghezza di banda a 20 dopo questo in modo che non tocchi mai le bande...mi dà ancora l'"errore di apertura 131"

ERR_INVALID_TRADE_VOLUME 131 Volume di scambio non valido.

cosa succede con questo?