Aiuto per la codifica - pagina 246

 
macerina:
Grazie Mladen per il codice ... Questo ha il doppio confronto macd e 50 crossover come hai spiegato nella logica precedente. Grazie in anticipo

macerina

La differenza è che nella versione grafica aspen il segnale secondario di entrata è un incrocio tra l'rsi e la sua linea di segnale, mentre nella versione metatrader il segnale secondario è un incrocio dell'rsi di una linea 50. La parte Macd è la stessa (si dovrebbe prendere il segnale a barre chiuse - questo è il modo in cui è fatto nella versione grafica di Aspen)

 

grazie per le informazioni mladen ... è possibile impostare l'opzione nello stesso indicatore per selezionare la linea 50 cross e la linea di segnale cross ...

Grazie in anticipo

 
mladen:
sulaimoney Tutto è OK con queste procedure. Allego un semplice indicatore che mostra che tutto è a posto quando le chiamate a queste due procedure vengono eseguite una dopo l'altra. Controlla il resto del codice poiché l'errore non è in quelle due procedure

Ciao Mladen

Ho controllato il codice e ho trovato alcuni errori che ho sostituito.

Ora sto cercando di usare il valore di

doppio lastorderprice = 0;

E

int bscount = 0;

Come variabili in un ambito globale con l'ea in modo che possano essere chiamate da e.g. void NewOrder()

// OnEveryTick

void LastBuySellOrder() // Esegue il loop di tutti gli ordini aperti per selezionare l'ultimo ordine (acquisto/vendita) OnEveryTick

{

double lastorderprice = 0;

datetime lastTime = 0;

datetime closeTime = 0;

int lastTicket = -1; // Nessuno aperto.

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId

&&( OrderType() == OP_BUY || OrderType() == OP_SELL )

&& OrderOpenTime() >= lastTime && OrderCloseTime() == closeTime

&& OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastorderprice = OrderOpenPrice();

closeTime = OrderCloseTime();

lastTicket = OrderTicket();

}

return(lastTicket);

}

else

Print("OrderSelect() error - ", ErrorDescription(GetLastError());

}

void PendingStopOrderCount()

{

int bscount = 0;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol())

se (OrderMagicNumber() == OrderId)

se (OrderType() == OP_BUYSTOP )

{

bscount++;

}

}

else

{

Print("OrderSend() error - ", ErrorDescription(GetLastError());

}

}

// Se esistono OpBuy o OpSell

void NewOrder()

{

se (bscount==0)

{

BuyStopPending();

}

}

 

CIAO

Questo indicatore è un repainter? Se sì, quando quante barre indietro?

xps_v8_oscillator.ex4xps_v8_oscillator.mq4

 
toldmikl:
HI

Questo indicatore è un repainter? Se sì, quando quante barre indietro?

xps_v8_oscillator.ex4xps_v8_oscillator.mq4
Sì. E' un indicatore dei venti solari con periodi impostati automaticamente a seconda dell'intervallo di tempo:

1 minuto: periodo = 2880

5 minuti: periodo = 576

15 minuti: periodo = 192

30 minuti: periodo = 96

1 ora e oltre: periodo = 48

 

OK ma io uso questo sul grafico offline M2 :S Quindi non è normale Timeframe

 
toldmikl:
OK ma io uso questo su grafico offline M2 :S Quindi non è normale Timeframe

Provatelo e lo vedrete voi stessi (usate qualcosa come autorefresh per forzare l'indicatore ad aggiornare tutte le barre da o semplicemente, quando si costruiscono abbastanza barre nuove, andate nei parametri, non cambiate nulla e cliccate su OK). Fate attenzione ai periodi in cui il trend cambia cosa farà.

Meglio di me che cerco di spiegare cosa c'è di sbagliato nel codice dei venti solari e di convincere qualcuno

 

Non posso cambiare il periodo solo posso vedere il codice sorgente, eccolo:

#proprietà indicator_separate_window

#proprietà indicatore_minimo 0

#proprietà indicatore_massimo 1

#proprietà indicator_buffers 3

#proprietà indicator_color2 C'72,49,255

#proprietà indicator_color3 C'255,49,72

#proprietà indicator_width2 6

#proprietà indicator_width3 6

int periodo;

extern bool alarm=false;

double ExtBuffer0[]

double ExtBuffer1[]

double ExtBuffer2[];

doppio alertBar;

doppio ultimo;

int init() {

//-----------------------------

switch ( Periodo() )

{

caso 1: periodo = 2880;break;

caso 5: periodo = 576;break;

caso 15: periodo = 192;break;

caso 30: periodo = 96;break;

caso 60: periodo = 48;break;

caso 240: periodo = 48;break;

caso 1440: periodo = 48;break;

caso 10080: periodo = 48;break;

default: periodo = 48;break;

}

//-----------------------------

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(Digits+1);

SetIndexBuffer(0,ExtBuffer0);

SetIndexBuffer(1,ExtBuffer1);

SetIndexBuffer(2,ExtBuffer2);

IndicatorShortName("");// X :-)");

SetIndexLabel(0, NULL);

SetIndexLabel(1, NULL);

SetIndexLabel(2, NULL);

return(0);

}

int deinit()

{

//----

ObjectDelete("XPS");

ObjectDelete("XPS2");

ObjectDelete("XPS3");

//----

return(0);

}

int start() {

int limit;

int counted_bars=IndicatorCounted();

double prev,current,old;

double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;

doppio prezzo;

double MinL=0;

doppio MaxH=0;

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(int i=0; i<limite; i++)

{ MaxH = Alto;

MinL = Basso[Più basso(NULL,0,MODE_LOW,periodo,i)];

prezzo = (Alto+Basso)/2;

Valore = 0,33*2*((prezzo-MinL)/(MaxH-MinL)-0,5) + 0,67*Valore1;

Valore=MathMin(MathMax(Valore,-0.999),0.999);

ExtBuffer0=0.5*MathLog((1+Valore)/(1-Valore))+0.5*Pesce1;

Valore1=Valore;

Pesce1=ExtBuffer0;

}

bool up = TRUE;

for(i=limite-2; i>=0; i--)

{

current=ExtBuffer0;

prev=ExtBuffer0;

se (((current0))||(current<0)) up= false;

se (((current>0)&&(prev0)) up= true;

if(!up) {

ExtBuffer2=1;

ExtBuffer1=0;

if (allarme && i==0 && last != 2 && ExtBuffer1 == 0 && Bars>alertBar)

{

Allarme("OSC... Possibile tendenza al ribasso su ",Periodo()," ",Simbolo());

alertBar = Bars;last = 2;

}

}

else {

ExtBuffer1=1;

ExtBuffer2=0;

if (allarme && i==0 && last != 1 && ExtBuffer2 == 0 && Bars>alertBar)

{

Allarme("OSC... Possibile trend in salita su ",Periodo()," ",Simbolo());

alertBar = Bars;

last = 1;

}

}

}//Fine ciclo

ObjectDelete("XPS");

ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS","!XPS v8", 28, "Arial Black", C'46,46,46');

ObjectSet("XPS", OBJPROP_CORNER, 2);

ObjectSet("XPS", OBJPROP_BACK, 0);

ObjectSet("XPS", OBJPROP_XDISTANCE, 6);

ObjectSet("XPS", OBJPROP_YDISTANCE, 8);

ObjectDelete("XPS2");

ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS2","!XPS v8", 28, "Arial Black", Silver);

ObjectSet("XPS2", OBJPROP_CORNER, 2);

ObjectSet("XPS2", OBJPROP_BACK, 0);

ObjectSet("XPS2", OBJPROP_XDISTANCE, 4);

ObjectSet("XPS2", OBJPROP_YDISTANCE, 10);

ObjectDelete("XPS3");

ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS3", "Trade like a BOSS", 9, "Arial Black", Silver);

ObjectSet("XPS3", OBJPROP_CORNER, 2);

ObjectSet("XPS3", OBJPROP_BACK, 0);

ObjectSet("XPS3", OBJPROP_XDISTANCE, 7);

ObjectSet("XPS3", OBJPROP_YDISTANCE, 3);

return(0);

}

Quindi?

 
toldmikl:
Non posso cambiare il periodo, posso solo vedere il codice sorgente, eccolo:

#proprietà indicator_separate_window

#proprietà indicator_minimum 0

#proprietà indicatore_massimo 1

#proprietà indicatore_buffer 3

#proprietà indicator_color2 C'72,49,255

#proprietà indicator_color3 C'255,49,72

#proprietà indicator_width2 6

#proprietà indicator_width3 6

int periodo;

extern bool alarm=false;

double ExtBuffer0[]

double ExtBuffer1[]

double ExtBuffer2[];

doppio alertBar;

doppio ultimo;

int init() {

//-----------------------------

switch ( Periodo() )

{

caso 1: periodo = 2880;break;

caso 5: periodo = 576;break;

caso 15: periodo = 192;break;

caso 30: periodo = 96;break;

caso 60: periodo = 48;break;

caso 240: periodo = 48;break;

caso 1440: periodo = 48;break;

caso 10080: periodo = 48;break;

default: periodo = 48;break;

}

//-----------------------------

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(Digits+1);

SetIndexBuffer(0,ExtBuffer0);

SetIndexBuffer(1,ExtBuffer1);

SetIndexBuffer(2,ExtBuffer2);

IndicatorShortName("");// X :-)");

SetIndexLabel(0, NULL);

SetIndexLabel(1, NULL);

SetIndexLabel(2, NULL);

return(0);

}

int deinit()

{

//----

ObjectDelete("XPS");

ObjectDelete("XPS2");

ObjectDelete("XPS3");

//----

return(0);

}

int start() {

int limit;

int counted_bars=IndicatorCounted();

double prev,current,old;

double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;

doppio prezzo;

double MinL=0;

doppio MaxH=0;

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(int i=0; i<limite; i++)

{ MaxH = Alto;

MinL = Basso[Più basso(NULL,0,MODE_LOW,periodo,i)];

prezzo = (Alto+Basso)/2;

Valore = 0,33*2*((prezzo-MinL)/(MaxH-MinL)-0,5) + 0,67*Valore1;

Valore=MathMin(MathMax(Valore,-0.999),0.999);

ExtBuffer0=0.5*MathLog((1+Valore)/(1-Valore))+0.5*Pesce1;

Valore1=Valore;

Pesce1=ExtBuffer0;

}

bool up = TRUE;

for(i=limite-2; i>=0; i--)

{

current=ExtBuffer0;

prev=ExtBuffer0;

se (((current0))||(current<0)) up= false;

se (((current>0)&&(prev0)) up= true;

if(!up) {

ExtBuffer2=1;

ExtBuffer1=0;

if (allarme && i==0 && last != 2 && ExtBuffer1 == 0 && Bars>alertBar)

{

Allarme("OSC... Possibile tendenza al ribasso su ",Periodo()," ",Simbolo());

alertBar = Bars;last = 2;

}

}

else {

ExtBuffer1=1;

ExtBuffer2=0;

if (allarme && i==0 && last != 1 && ExtBuffer2 == 0 && Bars>alertBar)

{

Allarme("OSC... Possibile trend in salita su ",Periodo()," ",Simbolo());

alertBar = Bars;

last = 1;

}

}

}//Fine ciclo

ObjectDelete("XPS");

ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS","!XPS v8", 28, "Arial Black", C'46,46,46');

ObjectSet("XPS", OBJPROP_CORNER, 2);

ObjectSet("XPS", OBJPROP_BACK, 0);

ObjectSet("XPS", OBJPROP_XDISTANCE, 6);

ObjectSet("XPS", OBJPROP_YDISTANCE, 8);

ObjectDelete("XPS2");

ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS2","!XPS v8", 28, "Arial Black", Silver);

ObjectSet("XPS2", OBJPROP_CORNER, 2);

ObjectSet("XPS2", OBJPROP_BACK, 0);

ObjectSet("XPS2", OBJPROP_XDISTANCE, 4);

ObjectSet("XPS2", OBJPROP_YDISTANCE, 10);

ObjectDelete("XPS3");

ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS3", "Trade like a BOSS", 9, "Arial Black", Silver);

ObjectSet("XPS3", OBJPROP_CORNER, 2);

ObjectSet("XPS3", OBJPROP_BACK, 0);

ObjectSet("XPS3", OBJPROP_XDISTANCE, 7);

ObjectSet("XPS3", OBJPROP_YDISTANCE, 3);

return(0);

}

Quindi?

Sta applicando il periodo 48 per qualsiasi time frame che non è un time frame standard (come i grafici offline "2 minuti")

Per le versioni dei venti solari per le quali è possibile cambiare il periodo di calcolo, vedere questo thread: https: //www.mql5.com/en/forum/179650

 

Saluti a voi guru, per favore aiutatemi a modificare questo script e a lasciare SOLO ordine, dimensione del lotto, acquisto/vendita. Possiedo già un EA che piazza automaticamente take profit/stop loss entrando così in conflitto con questo indy.

Questo script apre automaticamente qualsiasi numero di ordini di mercato specificati nel MENU in una volta sola, ma attualmente apre solo un ordine anche se si inseriscono 5 ordini. Per favore aiutatemi a risolvere questo ERRORE e ad eliminare completamente il take profit/stop loss dallo SCRIPT.

Vi benedico

Motivazione: