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

 

Gli ordini vengono piazzati troppo vicini all'attuale bid/ask. Gli ordini devono essere a una certa distanza dal prezzo corrente. Usa la funzione Marketinfo con il parametro stop_level per estrarre quell'informazione e assicurati che i tuoi ordini siano così lontani dall'ask/bid.

Spero che questo aiuti.

 
Maji:
Gli ordini vengono piazzati troppo vicini all'attuale bid/ask. Gli ordini devono essere ad una certa distanza dal prezzo corrente. Usa la funzione Marketinfo con il parametro stop_level per estrarre quell'informazione e assicurati che i tuoi ordini siano così lontani dalla domanda/offerta.

ummm....

scusa ma mi hai perso...

Non posso semplicemente piazzare un ordine al livello "attuale"? La maggior parte di quello che ho fatto fino ad ora è stato eseguire gli ordini alla chiusura del periodo. Si può fare?

Devo prima imparare cosa sono il parametro stop_level e le funzioni marketinfo.

grazie per la direzione

per quello che può valere ecco l'aggiornamento che ho fatto all'indicatore delle bande di tendenza, è stato piuttosto divertente

Ok, eccolo qui...

Identificatori diinformazioni di mercato, usati con la funzione MarketInfo().

Può essere uno qualsiasi dei seguenti valori:

MODE_STOPLEVEL 14 Livello di stop in punti.

quindi presumo che sia...

MarketInfo(14)

dove lo metto?

o è...

MarketInfo(NULL,MODE_STOPLEVEL);

oppure...

double bid =MarketInfo(NULL,MODE_BID);

double ask =MarketInfo(NULL,MODE_ASK);

double point =MarketInfo(NULL,MODE_POINT);

Credo di non capire bene come usare questo... potete mostrarmi un esempio?

Ecco con cosa sto lavorando in questo caso...mi chiedo perché questo EA non aveva problemi a piazzare ordini prima e ora sì? Funzionava prima che aggiungessi il filtro?

//----------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);

// 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)

{

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)

{

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);

}

}

//+------------------------------------------------------------------+
File:
 

Dovresti usare MarketInfo(NULL,MODE_STOPLEVEL) per determinare quanto lontano devono essere situati i tuoi ordini stop dal prezzo corrente. Ricorda, restituirà il suo valore in pip.

Tuttavia, puoi convertire in punti usando qualcosa come questo:

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);

Ora assicuratevi che i vostri ordini stop siano almeno così lontani dal prezzo corrente di mercato. A proposito, usando NormalizeDouble e Digits, state convertendo il valore del pip nei posti appropriati dopo il decimale (4 o 2). Questa è una cosa molto bella in MT4.

Spero che questo aiuti.

Maji

 
Maji:
Dovresti usare MarketInfo(NULL,MODE_STOPLEVEL) per determinare quanto lontano i tuoi ordini stop dovrebbero essere posizionati dal prezzo corrente. Ricorda, restituirà il suo valore in pip.

Tuttavia, puoi convertire in punti usando qualcosa come questo:

double MinDist = NormalizeDouble(MarketInfo(NULL,MODE_STOPLEVEL)*Point, Digits);

Ora assicuratevi che i vostri ordini stop siano almeno così lontani dal prezzo corrente di mercato. A proposito, usando NormalizeDouble e Digits, state convertendo il valore del pip nei posti appropriati dopo il decimale (4 o 2). Questa è una cosa molto bella in MT4.

Spero che questo aiuti.

Maji

Quello che non capisco è perché l'aggiunta dell'indicatore come filtro ha incasinato il modo in cui piazza gli ordini o gli stop. Non ha cambiato nulla di tutto ciò, per quanto posso dire, quindi perché non permettere le transazioni sopra la linea cambia il modo in cui piazza gli ordini di stop?

 

Se non ti dispiace, mandami via e-mail il codice attuale. Proverò a dargli un'occhiata durante il fine settimana. Non posso promettere che lo sistemerò, ma darò un'occhiata onesta e ci proverò.

 

Ecco il tuo problema che dovresti guardare prima

if(isCrossed == 1 && Ask < upLevel-longrange)[/PHP]

Ask and upLevel are in "price" (like 115.56 or 1.2678) while longrange is in pips (like 4,5,6) and u cannot mixed them. U have to normalize the pips to "price" and this is done by muliplying the pips with Points

the corrected code is like that

[PHP]if(isCrossed == 1 && Ask < upLevel-longrange*Point)
 

beh, per una volta questa è una soluzione facile...

solo che...

...il fatto è che l'ho cambiato da quando ho fatto quel post. ... ho modificato l'indicatore con un parametro per rendere le bande più larghe o più strette e ho tolto la parte dell'EA che faceva un limite di prossimità alla linea. Ho pensato che se potessi semplicemente rendere le bande di scambio stesse strette o larghe, questo darebbe la stessa funzione senza essere così complesso, e per me è più facile tenere traccia mentale di ....so...

attualmente è così...

//----------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);

// 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)

{

if(UseStopLoss)

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

else

sia ask che uplevel sono entrambi in prezzo, vero? questo è il codice che sta ancora generando l'errore. deve esserci dell'altro...

 

Finora non vedo alcun problema (orientato al codice)

Ma logicamente, guardate questo

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

Non stai controllando che siano vicini, solo che il prezzo sia inferiore alla linea

 

Sapevo di averlo!!!

Ho testato esattamente quello che volevi ottenere, e nel mio post precedente ho solo messo l'EA sbagliato.

Questo EA può controllare fino a 4 TF per verificare se tutti ottengono il bordo allo stesso tempo. Puoi selezionarne solo uno se vuoi.

Puoi usarlo come esempio di come ottenere la logica da un indicatore, e come combinare più TF insieme

saluti

Eli

File:
tbs.mq4  7 kb
 
elihayun:
Sapevo di averlo!!!

Ho testato esattamente quello che volevi ottenere, e nel mio post precedente ho solo messo l'EA sbagliato.

Questo EA può controllare fino a 4 TF per verificare se tutti ottengono il bordo allo stesso tempo. Puoi selezionarne solo uno se vuoi.

Puoi usarlo come esempio di come ottenere la logica da un indicatore, e come combinare più TF insieme

saluti

Eli

questo è intrigante Devo ancora esplorare gli indicatori multi TF, ma credo che ci sia il merito di loro.