Comment coder ? - page 160

 
increase:
Je n'arrive jamais à obtenir de l'aide, les gars, s'il vous plaît, répondez à .

Avec une quantité modérée de travail de conjecture, je suggérerais que le problème est avec l'indicateur, ou votre extension à lui, et pas votre utilisation de iCustom. Peut-être serait-il préférable d'affecter les tampons 2 et 3 en même temps que les alertes ? (Bien que je n'ai pas réussi à comprendre comment/quand leurs valeurs d'index zéro ([0]) seraient assignées de toute façon).

 

Informations sur les données de prix

Mes entrées et sorties sont basées sur des signaux générant une condition sur l'ouverture de la barre suivante (entrée et sortie), dois-je utiliser les prix d'ouverture pour les indicateurs et les moyennes mobiles ? J'ai toujours utilisé les données de fin de journée pour les transactions boursières, c'est donc naturellement vers elles que je me suis tourné. Quel est le consensus en la matière ?

 

Je pense simplement

Comment fixer un stop suiveur au niveau minimum de la paire ? Ainsi, si le niveau de stop est à 4 pip ou 25 pip, le sl se déclenchera à ce niveau, selon la paire.

Je devrais dire que comment utiliser les spécifications du contrat pour chaque paire.

Merci

Beno

 

Indicateur Sidus_Bago

Salut augmentation,

Je me demande si vous pouvez m'aider à coder Sidus_Bago pour en faire un indicateur MTF. Je trouve cet indicateur très bon aussi.

Sidus_Bago est ici :

Indicateur "confirmation du système Sidus" ?

Merci beaucoup.

 

Quelqu'un peut-il m'aider avec cet EA ?

Bonjour à tous,

J'ai essayé ma première EA mais elle ne compile pas ; j'obtiens une erreur "'\end of program' - unbalanced left parenthesis" et je l'ai parcourue plusieurs fois mais je ne trouve pas le problème. Ne vous inquiétez pas de la logique de la stratégie de trading (à moins que vous ne soyez enthousiaste), je travaillerai dessus une fois qu'elle sera compilée et fonctionnera...

Apparemment, je n'ai pas la permission de joindre des fichiers, donc désolé pour le copier-coller aussi.

Merci,

Rob,

Perth, Aus

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

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

//| Rob_Ea.mq4 |

//| Rob Cousins

//| |

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

#property copyright "Rob Cousins"

#property link ""

#define MAGICMA 20090216

//---- paramètres d'entrée

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 ;

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

//| fonction d'initialisation de l'expert

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

int init()

{

//----

//----

return(0) ;

}

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

//| fonction de désinitialisation experte |

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

int deinit()

{

//----

//----

return(0) ;

}

string Indication_actuelle()

{

// Variables de moyenne mobile

double MA_Short ;

double MA_Long ;

string Current_MA_Indicator ;

string Previous_MA_Indicator ;

string MA_Indicator ;

// Variables stochastiques

string Current_Stoch_Indicator ;

string Previous_Stoch_Indicator ;

string Stoch_Indicator ;

// Variables RSI

string Current_RSI_Indicator ;

string Previous_RSI_Indicator ;

string RSI_Indicator ;

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

// d'abord obtenir les MAs et vérifier si une MA Cross

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

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

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

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

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

// définir la valeur précédente et actuelle en utilisant la MA décalée (le dernier '1' dans les options)

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

si (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="BUY" ;

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

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

// Vérification de l'indicateur stochastique

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

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

if(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" ;

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

// Contrôle de l'indicateur RSI

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

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

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

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

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

si ((Current_RSI_Indicator=="BUY") && (Previous_RSI_Indicator=="BUY")) RSI_Indicator="BUY" ;

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

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

// Déterminez si vous êtes dans une situation d'achat ou de vente.

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

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

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

}

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

//| Calculer les positions ouvertes |

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

string Current_Trade(string symbol)

{

//----

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

{

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

{

retourne ("NONE") ;

pause ;

}

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

{

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

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

}

}

}

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

// Si le signal a changé de direction, la première chose à faire est de fermer la transaction ouverte avant d'en ouvrir une autre.

// la transaction ouverte en cours avant d'en ouvrir une autre.

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

void CloseTrade(string symbol)

{

// double ma ;

//---- trading seulement pour les premiers tiks de la nouvelle barre

// si(Volume[0]>1) retour ;

//----

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ; // il n'y a pas de transactions ouvertes

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

//---- vérifier le type d'ordre

// laisser les deux options pour le moment au cas où je voudrais le faire différemment.

// par exemple avoir une couleur différente, ou autre. Sinon, les deux commandes sont les mêmes

// et vous n'en avez besoin que d'une seule. Sauf pour les prix différents je suppose... Doh !

if(OrderType()==OP_BUY)

{

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

break ;

}

si(OrderType()==OP_SELL))

{

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

break ;

}

}

//----

}

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

// Ouvrez une position si c'est ce que les feuilles de thé disent.

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

void OpenTrade(string symbol,string Type)

{

int res ;

//---- conditions d'achat

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

//---- conditions de vente

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

}

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

//| fonction de démarrage de l'expert |

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

void start()

{

//----

//---- calculer les ordres ouverts par le symbole actuel

//--- S'il n'y a pas de transaction ouverte, il suffit d'en ouvrir une...

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

// Mais s'il y a une transaction ouverte, nous devons d'abord la fermer avant d'en ouvrir une nouvelle.

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

{

CloseTrade(Symbol()) ;

OpenTrade(Symbol(),Current_Indication()) ;

}

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

{

CloseTrade(Symbol()) ;

OpenTrade(Symbol(),Current_Indication()) ;

}

retour ;

}

 

voilà.........................................

Dossiers :
robtestea.mq4  7 kb
 

OK, c'était rapide ! Merci beaucoup. Quel était le problème ?

Rob.

 

Problème d'écriture de fichier

Je programme une ea qui utilise des fichiers pour conserver les résultats des transactions (pertes, gains) avec les valeurs des indicateurs. Donc, lorsque l'ea entre en transaction, j'écris les valeurs des indicateurs et l'heure à laquelle la transaction a été effectuée, dans le fichier "sellOpenInd.tab" :

Après cette opération, le fichier comprend :

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;

}

}

}

 

A chaque étape de votre cycle, vous ouvrez le fichier "sellOpenInd.tab" encore et encore.

Essayez ceci :

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;

}

}

}
 

Bonjour Roger09, j'ai déjà essayé cette méthode et cela n'a rien donné. On dirait que le pointeur ne passe pas à la ligne suivante mais je ne sais pas pourquoi.

En tout cas, merci pour votre réponse.

Raison: