Come codificare? - pagina 160

 
increase:
Non sembra mai che qualcuno mi aiuti, ragazzi per favore rispondete

Con una moderata quantità di congetture, suggerirei che il problema è con l'indicatore, o la tua estensione ad esso, e non il tuo uso di iCustom. Forse sarebbe meglio assegnare i buffer 2 e 3 insieme agli avvisi? (Anche se non sono riuscito a capire come/quando i loro valori di indice zero ([0]) verrebbero comunque assegnati).

 

Informazioni sui dati dei prezzi

Le mie uscite ed entrate sono basate su segnali che generano una condizione sull'apertura della barra successiva (entrata ed uscita), dovrei usare i prezzi aperti per gli indicatori e le medie mobili? Ho sempre usato i dati di fine giornata per gli scambi azionari, quindi naturalmente è quello verso cui ho gravitato. Qual è il consenso là fuori?

 

Stavo pensando

come si imposta un trailing stop al livello di stop minimo della coppia, in modo che se il livello di stop è a 4 pip o 25 pip, lo sl entrerà in funzione a seconda della coppia.

Dovrei dire che come si usa la specifica del contratto per ogni coppia.

Grazie

Beno

 

Indicatore Sidus_Bago

Ciao aumento,

Mi chiedo se puoi aiutarmi a codificare Sidus_Bago per essere un indicatore MTF. Penso che questo indicatore molto buono troppo.

Sidus_Bago è qui:

Sidus conferma del sistema' indicatore?

Grazie mille.

 

Qualcuno può aiutarmi con questo EA?

Ciao a tutti,

Ho provato il mio primo EA ma non si compila; ottengo un errore "'\fine del programma' - parentesi sinistra sbilanciata" e l'ho esaminato più volte ma non riesco a trovare il problema. Non preoccupatevi della logica della strategia di trading (a meno che non siate appassionati), ci lavorerò una volta che avrà compilato ed eseguito...

A quanto pare non ho il permesso di allegare file, quindi scusate anche il taglia e incolla.

Grazie,

Rob,

Perth, Aus

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

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

//| Rob_Ea.mq4

//| Rob Cousins |

//| |

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

#proprietà copyright "Rob Cousins"

#proprietà link ""

#define MAGICMA 20090216

//---- parametri di ingresso

extern double Lots;

extern int Short_MA=5;

extern int Long_MA=15;

extern double Stoch_Upper=70.0;

extern double Stoch_Lower=30.0;

extern double RSI_Upper=80.0;

extern double RSI_Lower=20.0;

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

//| funzione di inizializzazione esperto |

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

int init()

{

//----

//----

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit()

{

//----

//----

return(0);

}

stringa Current_Indication()

{

// Variabili della media mobile

doppio MA_Short

doppio MA_Long

stringa Current_MA_Indicator;

stringa Previous_MA_Indicator

stringa MA_Indicator;

// Variabili stocastiche

stringa Current_Stoch_Indicator

stringa Previous_Stoch_Indicator

stringa Stoch_Indicator;

// Variabili RSI

stringa Current_RSI_Indicator

stringa Previous_RSI_Indicator;

stringa RSI_Indicator;

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

// prima otteniamo le MA e verifichiamo la presenza di una MA Cross

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

MA_Short=iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,0);

MA_Long=iMA(NULL,0,Long_MA,0,0,0,PRICE_MEDIAN,0);

se (MA_Short>MA_Long) Current_MA_Indicator="BUY";

se (MA_Short<MA_Long) Current_MA_Indicator="SELL";

// imposta il valore precedente e corrente usando la MA spostata (l'ultimo '1' nelle opzioni)

se (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)>iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="BUY";

se (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)<iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="SELL";

if ((Current_MA_Indicator=="BUY") && (Previous_MA_Indicator=="BUY")) MA_Indicator="ACQUISTA";

if ((Current_MA_Indicator=="SELL") && (Previous_MA_Indicator=="SELL")) MA_Indicator="SELL";

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

// Controllo indicatore stocastico

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

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)>Stoch_Upper) Current_Stoch_Indicator="BUY";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)<Stoch_Lower) Current_Stoch_Indicator="SELL";

se(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)>Stoch_Upper) Previous_Stoch_Indicator="BUY";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)<Stoch_Lower) Previous_Stoch_Indicator="SELL";

if ((Current_Stoch_Indicator=="BUY") && (Previous_Stoch_Indicator=="BUY")) Stoch_Indicator="BUY";

if ((Current_Stoch_Indicator=="SELL") && (Previous_Stoch_Indicator=="SELL")) Stoch_Indicator="SELL";

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

// Controllo indicatore RSI

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

if(iRSI(NULL,0,3,PRICE_CLOSE,0)>RSI_Upper) Current_RSI_Indicator="BUY";

se(iRSI(NULL,0,3,PRICE_CLOSE,0)<RSI_Lower) Current_RSI_Indicator="SELL";

se(iRSI(NULL,0,3,PRICE_CLOSE,1)>RSI_Upper) Previous_RSI_Indicator="BUY";

se(iRSI(NULL,0,3,PRICE_CLOSE,1)<RSI_Lower) Previous_RSI_Indicator="SELL";

if ((Current_RSI_Indicator=="BUY") && (Previous_RSI_Indicator=="BUY")) RSI_Indicator="COMPRA";

if ((Current_RSI_Indicator=="SELL") && (Previous_RSI_Indicator=="SELL")) RSI_Indicator="SELL";

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

// Capire se si è in una situazione di acquisto o di vendita

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

if((MA_Indicator=="BUY") && (Stoch_Indicator=="BUY") && (RSI_Indicator=="BUY") return("BUY");

if((MA_Indicator=="SELL") && (Stoch_Indicator=="SELL") && (RSI_Indicator=="SELL") return("SELL");

}

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

//| Calcola le posizioni aperte

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

stringa Current_Trade(string symbol)

{

//----

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)

{

ritorna ("NESSUNO");

break;

}

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

{

if(OrderType()==OP_BUY) return("BUY");

if(OrderType()==OP_SELL) return("SELL");

}

}

}

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

// Se il segnale ha cambiato direzione, la prima cosa da fare è chiudere

// il trade correntemente aperto prima di aprirne un altro.

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

void CloseTrade(string symbol)

{

// doppio ma;

//---- andare a fare trading solo per i primi tik della nuova barra

// if(Volume[0]>1) return;

//----

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; // non ci sono operazioni aperte

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

//---- controllare il tipo di ordine

// lasciando entrambe le opzioni per il momento, nel caso in cui volessi fare diversamente

// ad esempio avere un colore diverso o altro. Altrimenti i due comandi sono gli stessi

// e ne servirebbe solo uno. Tranne i prezzi diversi, suppongo... Doh!

if(OrderType()==OP_BUY)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

break;

}

se(OrderType()==OP_SELL)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);

break;

}

}

//----

}

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

// Aprire una posizione se questo è quello che dicono le foglie di tè

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

void OpenTrade(string symbol,string Type)

{

int res;

//---- condizioni di acquisto

if(Type=="BUY") OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "ROB EA TEST",MAGICMA,0,Blue);

//---- condizioni di vendita

if(Type=="SELL") OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "ROB EA TEST",MAGICMA,0,Red);

}

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

//| funzione di avvio esperto |

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

void start()

{

//----

//---- calcola gli ordini aperti in base al simbolo corrente

//--- Se non ci sono compravendite aperte, basta aprirne una...

if(Current_Trade(Symbol())=="NONE") OpenTrade(Symbol(),Current_Indication());

// Ma se c'è una negoziazione aperta dobbiamo prima chiuderla prima di aprire la nuova.

if ((Current_Trade(Symbol())=="BUY") && (Current_Indication()=="SELL"));

{

CloseTrade(Symbol());

OpenTrade(Symbol(),Current_Indication());

}

se ((Current_Trade(Symbol())=="SELL") && (Current_Indication()=="BUY"));

{

CloseTrade(Symbol());

OpenTrade(Symbol(),Current_Indication());

}

ritorno;

}

 

ecco a voi.........................................

File:
robtestea.mq4  7 kb
 

OK, è stato veloce! Grazie mille. Qual era il problema?

Rob.

 

Problema con la scrittura del file

Sto programmando un ea che usa dei file per mantenere i risultati del trade (perdita, vittoria) con i valori degli indicatori. Così quando l'EA entra nel trade scrivo i valori degli indicatori e il tempo, quando il trade è stato fatto, nel file "sellOpenInd.tab":

Dopo questa operazione il file include:

CCISDivPresent 22 69 0.000024 0.000046 0.000045 -0.000015 2002.05.07 13:00

CCISDivPresent 66 85 0.000064 0.000032 0.000037 -0.000033 2002.05.15 07:00

CCISDivPresent 77 90 0.000041 -0.000029 0.000008 -0.000020 2002.06.03 08:00

etc...

In next stage i open this file and look into history for dates of opened orders then i check results of this trades and write into file "sellResults.tab"+indicators values writen in previous stage(above) .And here problem occures, only one same trade is recorded:

Rule7 Rule6 Rule5 Rule4 Rule3 Rule2 Rule1 TradeOutcome

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

etc..

Here is my code(i know is not looking nice ):

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}

 

Ad ogni passo del tuo ciclo apri il file "sellOpenInd.tab" ancora e ancora.

Prova questo:

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}
 

Ciao Roger09 ho provato questo prima e non aiuta, sembra che il puntatore non si sposti nella riga successiva ma non so perché.

Comunque grazie per la risposta.