Come codificare? - pagina 50

 

Recuperare un tipo di dati da un indicatore

Ciao

È possibile recuperare un tipo di dati da un indicatore (3 MA Cross w alert) per metterlo in un EA?

Questo è quello che voglio fare:

Nell'indicatore (3 MA Cross w alert) ho messo un tipo di dati :

double execute_trade = "ok_buy" o execute_trade = "ok_sell" qui :

************Indicator ************

se ((fasterMAnow > slowerMAnow &&

fasterMAprevious <= slowerMAprevious &&

fasterMAafter > slowerMAafter &&

mediumMAnow > slowerMAnow )

||

(fasterMAnow > slowerMAnow &&

mediumMAnow > slowerMAnow &&

mediumMAprecedente <= slowerMAprecedente &&

mediumMAafter > slowerMAafter ))

{

CrossUp = Low - Range*0.5;

stringa execute_trade = "ok_buy";

}

if ((fasterMAnow < slowerMAnow &&

fasterMAprevious >= slowerMAprevious &&

fasterMAafter < slowerMAafter &&

mediumMAnow < slowerMAnow )

||

(fasterMAnow < slowerMAnow &&

mediumMAnow < slowerMAnow &&

mediumMAprecedente >= slowerMAprecedente &&

mediumMAafter < slowerMAafter ))

{

CrossDown = High + Range*0.5;

execute_trade = "ok_sell";

}

************************

e vorrei recuperare "excute_trade" nel mio EA in questo modo:

***********EA***************

se (execute_trade== "ok_buy")

Ordine = SIGNAL_BUY;

se (compravendita_scambio== "ok_sell")

Ordine = SIGNAL_SELL;

****************************

Ma non so come fare

aiuto per favore

Cordiali saluti

 
Julia:
Qualcuno può essere così gentile da dirmi come codificare il seguente codice?

Se il mio Ea è acceso sul grafico M30, voglio che il codice dica

se(sul timeframe M5, la chiusura di oggi è>la chiusura di ieri)

{

.........

}

La chiusura di oggi è l'attuale BID; la chiusura di ieri è indipendente dal timeframe, quindi non importa il timeframe M30 o M5.

if(Bid > iClose(NULL,PERIOD_D1,1))

{

...

}

 
natsirte:
Ciao

È possibile recuperare un tipo di dati da un indicatore (3 MA Cross w alert) per metterlo in un EA?

Questo è quello che voglio fare:

Nell'indicatore (3 MA Cross w alert) ho messo un tipo di dati :

double execute_trade = "ok_buy" o execute_trade = "ok_sell" qui :

************Indicator ************

se ((fasterMAnow > slowerMAnow &&

fasterMAprevious <= slowerMAprevious &&

fasterMAafter > slowerMAafter &&

mediumMAnow > slowerMAnow )

||

(fasterMAnow > slowerMAnow &&

mediumMAnow > slowerMAnow &&

mediumMAprecedente <= slowerMAprecedente &&

mediumMAafter > slowerMAafter ))

{

CrossUp = Low - Range*0.5;

stringa execute_trade = "ok_buy";

}

if ((fasterMAnow < slowerMAnow &&

fasterMAprevious >= slowerMAprevious &&

fasterMAafter < slowerMAafter &&

mediumMAnow < slowerMAnow )

||

(fasterMAnow < slowerMAnow &&

mediumMAnow < slowerMAnow &&

mediumMAprecedente >= slowerMAprecedente &&

mediumMAafter < slowerMAafter ))

{

CrossDown = High + Range*0.5;

execute_trade = "ok_sell";

}

************************

e vorrei recuperare "excute_trade" nel mio EA in questo modo:

***********EA***************

se (execute_trade== "ok_buy")

Ordine = SIGNAL_BUY;

se (compravendita_scambio== "ok_sell")

Ordine = SIGNAL_SELL;

****************************

Ma non so come fare

aiuto per favore

Cordiali saluti

Devi usare la funzione iCustom per recuperare il valore dei buffer (cioè le frecce);

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Calcola l'indicatore personalizzato specificato e restituisce il suo valore. L'indicatore personalizzato deve essere compilato (file *.EX4) e trovarsi nella directory terminal_directory\experts\indicators.

Parametri:

symbol - Simbolo i cui dati devono essere usati per calcolare l'indicatore. NULL significa simbolo corrente.

timeframe - Timeframe. Può essere uno qualsiasi dei valori dell'enumerazione Timeframe. 0 significa il timeframe del grafico corrente.

name - Nome del programma compilato dell'indicatore personalizzato.

... - Parametri impostati (se necessario). I parametri passati e il loro ordine devono corrispondere all'ordine di designazione e al tipo di variabili esterne dell'indicatore personalizzato.

mode - Indice di linea. Può essere da 0 a 7 e deve corrispondere all'indice usato da una delle funzioni SetIndexBuffer.

shift - Indice del valore preso dal buffer dell'indicatore (spostamento relativo alla barra corrente di un determinato numero di periodi precedenti).

Esempio:

double val=iCustom(NULL, 0, "SampleInd",13,1,0);

Nel tuo caso la sintassi dovrebbe essere :

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 0, 0) > 0) // Buy

{

...

}

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 1, 0) > 0) // Sell

{

...

}

I parametri da p1 a p10 sono i valori da inviare all'indicatore come parametri esterni. Per esempio, p1 indica il valore da assegnare a FasterMA, p2 a FasterShift, e così via fino all'ultima dichiarazione esterna p10 SoundAlert. Vedi il codice dell'indicatore per conoscere l'ordine e il significato di essi.

 

Grazie Michel.

Ma cosa succede se il codice è in un codice indicatore?

E':

if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1])?????

 
Beno:
Gidday sto lentamente correggendo gli errori in alcuni se il mio ea (e imparando molto sulla strada) ma che cosa significa questo.

2007.10.24 21:22:24 1998.11.20 06:00 The Abyss GBPJPY,Daily: numero doppio non valido come parametro 6 per la funzione OrderSend

Non riesco a trovare nulla su questo errore che cosa dovrei guardare.

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Come potete vedere il parametro sei è lo stoploss. Assicuratevi che il vostro stoploss sia definito come un int. Poi, assicurati nel tuo comando OrderSend() che stai moltiplicando lo stoploss per un punto. Questo converte nel doppio giusto per la valuta che stai negoziando.

Esempio per long:

ticketa=OrderSend(Symbol(),OP_BUY,lotsize,Ask,slip,Ask-intStopLoss*Point,Ask+intTakeProfit*Point, "Comment",magic,0,Green);

Esempio in breve:

ticketb=OrderSend(Symbol(),OP_SELL,lotsize,Bid,slip,Bid+intStopLoss*Point,Bid-intTakeProfit*Point, "Comment",magic,0,Blue);

Spero che questo aiuti.

 

Grazie Wolfe

Questo ha aiutato molto ma ha aperto un nuovo problema lol ora compra ma non vende bene non nel posto giusto. Ho provato a comprare quando tutti e tre gli indi sono blu e a vendere quando sono tutti rossi.

Penso di aver scelto il nome giusto "The Abyss" per l'ea. dato che è dove sono seduto cercando di codificare la mia via d'uscita. LOL

2007.11.24 10:14:44 2007.11.23 12:00 The Abyss EURUSD,H4: Errore nell'aprire un ordine SELL: 0

void CheckForSignals() {

double TML=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,0,shift);

double TMS=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,1,shift);

double hasOpenLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,1,shift) ;

double hasCloseLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,3,shift) ;

double hasOpenShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,0,shift) ;

double hasCloseShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,2,shift) ;

double SDLL=iCustom(NULL,0, "Slope Direction Line",period,method,price,0,shift);

double SDLS=iCustom(NULL,0, "Slope Direction Line",periodo,metodo,prezzo,1,shift);

buysig=false;

sellsig=false;

closebuy=false;

closesell=false;

bool Long1 = TML;

bool Short1 = TMS;

bool Long2 = SDLL;

bool Short2 = SDLS;

bool Long3 = hasOpenLong > hasCloseLong;

bool Short3 = hasOpenShort < hasCloseShort;

buysig = Long1 && Long2 && Long3;

sellsig = Short1 && Short2 && Short3;

closebuy=sellsig;

closesell=buysig;

}

void CheckForOpen() {

if (last==Time[0]) return;

int res,ord;

doppio ingresso,stop;

ord=CalculateCurrentOrders();

if (ord!=0) CheckForClose();

//---- condizioni di acquisto

if (buys< buysig) {

res=OpenAtMarket(OP_BUY,Lots);

if (res<0) Print("Errore nell'apertura dell'ordine BUY : ",(GetLastError());

else last=Time[0];

}

//---- condizioni di vendita

if (sells< sellsig) {

res=OpenAtMarket(OP_SELL,Lots);

if (res<=0) Print("Errore apertura ordine SELL : ",(GetLastError());

else last=Time[0];

}

}

int OpenAtMarket(int mode,double lot) {

int tr,col;

doppio openprice;

tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

RefreshRates();

se (mode==OP_SELL) {

openprice=Bid;

col=Rosso;

} else {

//openprice=nd(Ask);

openprice=Ask;

col=Blu;

}

OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,EAName+Magic,Magic,0,col);

}

return;

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

//| Controlla le condizioni dell'ordine di chiusura |

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

void CheckForClose() {

int totale;

//----

total=OrdersTotal();

for(int i=totale;i>=0;i--)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continua;

if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continua;

//---- controllare il tipo di ordine

if(OrderType()==OP_BUY && closebuy) CloseAtMarket(OrderTicket(),OrderLots());

if(OrderType()==OP_SELL && closesell) CloseAtMarket(OrderTicket(),OrderLots());

}

}

bool CloseAtMarket(int ticket,double lot) {

bool bres=false; int tr;

tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

RefreshRates();

bres=OrderClose(ticket,lot,OrderClosePrice(),slippage,White);

if (!bres) Print("Errore nella chiusura dell'ordine: ",(GetLastError());

}

 
Julia:
Grazie Michel.

Ma cosa succede se il codice è in un codice indicatore?

È così:

if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1])?????

Sì, può essere; tutto dipende da ciò che si vuole fare...

 

Aiuto Plz - Convertire questi in Mq4 - Grazie mille

Cari tutti:

Sto costruendo un sistema che penso sia molto buono, ho testato l'idea prima per 3 mesi, ora sto cercando di codificare un indicatore che sarà al più presto nel forum in modo da poterlo testare e sarà davvero fare buoni soldi credo:

Plz mi aiuta per ora a convertire queste linee in codifica mql4:

1- Ho vairable X, questo avrà un valore e lo sto calcolando ora

Quindi abbiamo X come un intero

2- l'indicatore deve controllare l'ora GMT corrente, deve essere 6:00am GMT - Time Frame 1 H

-- controllare l'ora GMT 6:00am, QUANDO questa candela si chiude, dobbiamo calcolare la seguente variabile di questa candela:

Alto - Basso = A

A / 2 = B

B - Alto = C = SL

D = X * 30%

Buy_Entry= D + C

Buy_Target= C + (X * 60%)

Vendere_entrata= C - D

Vendere _Target= C - (X * 60%)

Poi:

Voglio far scorrere il risultato sotto forma di linee sul grafico con Area GreaN per l'acquisto e Area rossa per lo Short Secondo l'entrata per l'acquisto e la vendita e lo SL

questi devono apparire automaticamente non appena la candela GMT delle 6:00 è finita, Time Frame 1H, quindi il calcolo deve essere secondo le 6:00 alle 6:59 GMT candela alta e bassa

PLZ Convertire questo a MQL4, in modo da poterlo testare e tornare di nuovo a puplish il risultato

GRAZIE TANTISSIMO

 
Beno:
Grazie Wolfe

Questo ha aiutato molto ma ha aperto un nuovo problema lol ora compra ma non vende bene non nel posto giusto. Ho provato a comprare ciò che tutti e tre gli indi sono blu e vendere quando sono tutti rossi.

Penso di aver scelto il nome giusto "The Abyss" per l'ea. visto che è dove sono seduto cercando di codificare la mia via d'uscita. LOL

Beno, non sono sicuro di questo. Di solito non ho avuto una buona esperienza con l'uso di indicatori che cambiano colore negli EA. Apri la tua finestra di dati con i tuoi indicatori attaccati e scopri quale valore numerico viene restituito per ogni colore. Questo può aiutare la tua codifica, inoltre assicurati di chiamare il buffer dell'indicatore corretto al momento giusto. (Sono sicuro che l'hai già fatto) Potresti avere più fortuna con l'aiuto se posti l'intero EA, se hai davvero bisogno di aiuto. Inoltre, personalmente lo codificherei con 2 funzioni Ordersend() separate, una dedicata agli short e una dedicata ai long. Questa è solo la mia opinione, rende le cose più facili da seguire.

Buona fortuna, tutti noi abbiamo avuto le nostre versioni dell'"Abisso"!

 

Grazie Wolfe

Ho intenzione di provare l'opzione 2 Ordersend per vedere cosa succede.

Motivazione: