Come codificare? - pagina 187

 

Sì, voglio fare 3 passi

Esempio:

Raggiungere 15 e tornare indietro di 10

Raggiungere 30 e tornare indietro di 15

Raggiungere 45 e tornare indietro di 15

Oppure chiudere allo stop loss.

Faccio una foto e cerco di spiegarmi meglio.

 
fosgate_r:
Questo è qualcosa di nuovo per me.

Quindi, la chiusura del trade perdente deve sempre aspettare che rimbalzi, giusto?

E se non rimbalza?

Chiuderemo allo SL iniziale?

Grazie per ora, l'ho già fatto, ora sto cercando di ottimizzare per ottenere buoni risultati con questa protezione delle perdite.

 

Sto cercando di trovare informazioni su come tracciare una linea, proprio come l'indicatore RSI per esempio... Ho due numeri che voglio tracciare come linee sullo stesso indicatore

So che coinvolgerà un array di qualche tipo, ma non sto avendo fortuna nel capire quale gruppo di codice farà accadere questo.

 

indicatore buffer

SPACECHIMP:
Sto cercando di trovare informazioni su come tracciare una linea, proprio come l'indicatore RSI per esempio... Ho due numeri che voglio tracciare come linee sullo stesso indicatore, so che si tratta di un array di qualche tipo, ma non ho fortuna nel capire quale gruppo di codice lo farà accadere.

Si prega di leggere questo articolo

Il linguaggio MQL4 per i neofiti. Indicatori personalizzati (parte 1) - Articoli MQL4

 
smb1970:
Ciao gente,

Non so se qualcuno conosce Forex Made-EZ di George Smith.

Attualmente sto rivedendo il suo lavoro e mi chiedevo se qualcuno ha codificato un indicatore per l'oscillatore Oscar che usa?

La formula è

lascia A = il massimo più alto delle ultime otto barre (inclusa questa)

lascia B = il minimo più basso delle ultime otto barre (inclusa questa)

lasciamo C = prezzo di chiusura delle barre attuali

lasciamo X = la figura precedente dell'oscillatore (Oscar)

L'oscillatore "grezzo" di oggi è uguale a (C-B) diviso per (A-B) per 100.

Poi "smussiamo" il nostro numero grezzo (chiamiamolo Y) in questo modo:

Numero finale dell'oscillatore = ((X diviso per 3) per 2), più (Y diviso per 3).

Se qualcuno ha codificato questo o può codificare questo sarebbe molto apprezzato.

Saluti Steve

Ho provato a codificare questo da solo. Qualcuno potrebbe commentare se questo fa quello che penso faccia. I valori non sembrano corrispondere a quelli che fanno se calcolo manualmente le cifre. Inoltre, parte solo dal momento in cui l'indicatore viene posizionato. Mi piacerebbe che mostrasse anche i valori storici.

#proprietà indicator_separate_window

#proprietà indicator_buffers 1

#proprietà indicator_color1 Red

//---- buffer

doppio ExtMapBuffer1[]

//+------------------------------------------------------------------+

//|funzione di inizializzazione dell'indicatore personalizzata

//+------------------------------------------------------------------+

int init()

{

//---- indicatori

SetIndexStyle(0,DRAW_LINE);

SetIndexBuffer(0,ExtMapBuffer1);

stringa short_name = "Indicatore Oscar";

IndicatorShortName(short_name);

//----

return(1);

}

//+------------------------------------------------------------------+

//| Funzione di deinizializzazione dell'indicatore Custor

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//| Funzione di iterazione dell'indicatore personalizzata |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

//---- controllare eventuali errori

if (counted_bars<0) return(-1);

//---- l'ultima barra contata sarà ricontata

se (counted_bars>0) counted_bars--;

int pos=Bars-counted_bars;

//---- ciclo di calcolo principale

doppio x;

x=50;

mentre(pos>=0)

{

double a, b, c, y, osc;

//mettiamo A = il massimo storico delle ultime otto barre (inclusa questa)

a=Alto;

//lascia B = il minimo più basso delle ultime otto barre (inclusa questa)

b=Basso;

//let C = prezzo di chiusura della barra attuale

c = Close[pos];

//let X = la cifra precedente dell'oscillatore (Oscar)

//L'oscillatore "grezzo" di oggi è uguale a (C-B) diviso per (A-B) per 100.

y=((c-b)/(a-b))*100;

//Successivamente "smussiamo" il nostro numero grezzo (chiamiamolo Y) in questo modo:

//Numero finale dell'oscillatore = ((X diviso per 3) per 2), più (Y diviso per 3).

osc=((x/3)*2)+(y/3);

ExtMapBuffer1[pos]= osc ;

pos--;

}

return(0);

}

Qualsiasi aiuto ricevuto con gratitudine.

Grazie Steve

 

Chiedi... Modo_trade

Ciao, qualcuno può dare un esempio per l'uso di MODE_TRADES?

Grazie.

 

Per smb1970 - è questo:

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Red

#property indicator_maximum 100

#property indicator_minimum 0

//

//

//

//

//

extern int OscPeriod = 8;

extern int OscPrice = PRICE_CLOSE;

double oscBuffer[];

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

//

//

//

//

//

int init()

{

SetIndexBuffer(0,oscBuffer);

IndicatorShortName("Osc ("+OscPeriod+")");

return(0);

}

int deinit() { return(0); }

int start()

{

int counted_bars=IndicatorCounted();

int i,limit;

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//

//

//

//

//

for(i=limit; i>=0; i--)

{

double price = iMA(NULL,0,1,0,MODE_SMA,OscPrice,i);

double high = High[ArrayMaximum(High,OscPeriod,i)];

double low = Low[ArrayMinimum(Low,OscPeriod,i)];

//

//

//

//

//

if (high!=low)

double raw = 100.00*(price-low)/(high-low);

else raw = 0.00;

oscBuffer= oscBuffer*2.0/3.0 + raw/3.0;

}

return(0);

}

Ma guardate anche l'immagine: in alto è "Oscar" in basso è la Ema(5) dello stocastico(8), o per semplificare ancora di più, in basso è Stocastico(8,5,1) con la linea di segnale impostata su esponenziale. Quindi "Oscar" è semplicemente una linea di segnale dello stocastico

File:
oscar.gif  21 kb
 

Grazie!

Grazie mladen, non solo è molto utile, è anche molto rivelatore!

 

NewB in bisogno di aiuto con la codifica :-(

Ciao a tutti,

Ho bisogno di un po' di aiuto disparato qui . Ho del codice che cercherà un accordo tra diversi indicatori. Una volta che sono tutti d'accordo voglio un modo per far entrare i trade nel modo in cui l'ho descritto nelle immagini del grafico. Finora posso inserire il primo trade "Buy", ma non inserisce solo 1 trade ...., ma fino a 8 trade. E poi, se il mercato mi va contro, inserisco un "contingency trade" dove compro/vendo di nuovo nonostante mi vada contro. Apprezzerei molto se qualcuno potesse mostrarmi come dovrebbe essere il codice corretto

Non sono sicuro che queste immagini verranno mostrate, ma nel caso le ho anche come allegati.

Ecco il mio codice imperfetto che dovrebbe eseguire il trade...

while (execute_trade ==5)

{if ( OrdersTotal() == buy_trade1 ) //buy_trade1 = 1...questo lo ferma dopo che 1 ordine è stato piazzato...ma non funziona ancora

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

execute_trade=0;

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

Stampa("Il mio biglietto è: " , biglietto);

{

buy1 = OrderOpenPrice(); //prendendo il prezzo del 1° ordine e spingendolo in questa variabile

// Comment("il prezzo aperto dell'ordine #1 è ", OrderOpenPrice() + " " + buy1 + " meno di " + (buy1-0.0030));

se (buy1 >= (buy1-0.0030))

{

//se ( OrdersTotal() <= buy_trade1 ) //questo lo ferma dopo che 1 ordine è stato piazzato.

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

//execute_trade=0;

}

} else

Print("OrderSelect ha restituito l'errore di ",GetLastError());

}

 

NewB in bisogno di aiuto con la codifica

Ciao a tutti,

Ho bisogno di un po' di aiuto disparato qui. Ho del codice che cercherà un accordo tra diversi indicatori. Una volta che sono tutti d'accordo voglio un modo per far entrare i trade nel modo in cui l'ho descritto nelle immagini del grafico. Finora posso inserire il primo trade "Buy", ma non inserisce solo 1 trade ...., ma fino a 8 trade. E poi, se il mercato mi va contro, inserisco un "contingency trade" dove compro/vendo di nuovo nonostante mi vada contro.Apprezzerei molto se qualcuno potesse mostrarmi come dovrebbe essere il codice corretto

Non sono sicuro che queste immagini mostreranno, ma nel caso le ho anche come allegati.

Pic 1

Pic 2

Ecco il mio codice imperfetto che dovrebbe eseguire il trade...

while (execute_trade ==5)

{if ( OrdersTotal() == buy_trade1 ) //buy_trade1 = 1...questo lo ferma dopo che 1 ordine è stato piazzato...ma non funziona ancora

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

execute_trade=0;

if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))

Stampa("Il mio biglietto è: " , biglietto);

{

buy1 = OrderOpenPrice(); //prende il prezzo del 1° ordine e lo spinge in questa variabile

// Comment("il prezzo aperto dell'ordine #1 è ", OrderOpenPrice() + " " + buy1 + " meno di " + (buy1-0.0030));

se (buy1 >= (buy1-0.0030))

{

//se ( OrdersTotal() <= buy_trade1 ) //questo lo ferma dopo che 1 ordine è stato piazzato.

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

//execute_trade=0;

}

}

else

Print("OrderSelect ha restituito l'errore di ",GetLastError());

}

Motivazione: