Je l'ai crée avec l'éditeur, ça ressemble beaucoup à d'autres languages de programmation, j'ai juste eu quelques problèmes avec des fonctions "rebelles"
Mais il est très basique, histoire d'apprendre le language et pourquoi pas pour s'en servir comme base pour un vrai EA (car j'ai même pas cherché à optimiser un tant soit peu)
D'ailleurs pour pouvoir optimiser faudrait que je puisse faire un petit backtest et voir où ça clochera et pourquoi (même si j'en ai déjà un peu l'idée)
Code : Tout sélectionner
//+------------------------------------------------------------------+
//| DhaoS Stochastiques EA v0.1 |
//| Copyleft 2010 DhaoS - sylvaintro@gmail.com |
//| |
//| 09/03/10 - v0.1 : creation de l'EA |
//| |
//| | |
//+------------------------------------------------------------------+
//--------------------------------- Initialisations ----------------------------------
//Diverses
#define STO_barsToAnalyse 1
string symb="EURUSD";
int ticket,type;
double lots=0.1;
int spread=3;
// Pour STO
double mainLine, prevMainLine, signalLine, prevSignalLine;
//--------------------------------------------------------------------------------------
// Fonction qui parcoure les ordres et vérifie s'il y en a un qui a moins de 4H
// - si vrai, elle initialise la variable type avec son type (0 BUY, 1 SELL), la variable ticket avec son ticket, la fonction va renvoyer 0.
// - si faux, les variables type et ticket seront vides, la fonction va renvoyer 1.
int checkOrdersTime(){
type=NULL;
for(int i=0; i<=OrdersTotal(); i++){
if(OrderSelect(i,SELECT_BY_POS)==true){
if(OrderSymbol()==symb){ type=OrderType(); ticket=OrderTicket(); bool rienfaire=true; }
}
}
if(rienfaire==true){return (0);}
else return (1);
}
int start(){
// On analyse que les 2 précédentes barres de STO apr défaut
for(int a=1;a<=STO_barsToAnalyse;a++){
mainLine=iStochastic(symb,PERIOD_H4,14,4,3,MODE_SMA,0,MODE_MAIN,a);
prevMainLine=iStochastic(symb,PERIOD_H4,14,4,3,MODE_SMA,0,MODE_MAIN,a+1);
signalLine=iStochastic(symb,PERIOD_H4,14,4,3,MODE_SMA,0,MODE_SIGNAL,a);
prevSignalLine=iStochastic(symb,PERIOD_H4,14,4,3,MODE_SMA,0,MODE_SIGNAL,a+1);
// Si on a un signal d'achat
if(prevMainLine<prevSignalLine && mainLine>signalLine){
// S'il y a des ordres de - de 4H :
if (checkOrdersTime()==0){
// Si c'est un ordre de vente alors je le cloture et j'achète (et donc si c'est un ordre d'achat, je ne fais rien)
if (type==1){ Alert("Cloture SELL puis BUY",TimeToStr(Time[a])); OrderClose(ticket,lots,Ask,spread+2); OrderSend(symb,OP_BUY,lots,Ask,spread,0,0); }
}
// S'il n'y a pas d'ordre de - de 4H, alors j'achète
else { Alert("BUY",TimeToStr(Time[a])); OrderSend(symb,OP_BUY,lots,Ask,spread,0,0); }
}
// Si on a un signal de vente
if(prevMainLine>prevSignalLine && mainLine<signalLine){
// S'il y a des ordres de - de 4H :
if (checkOrdersTime()==0){
// Si c'est un ordre d'achat alors je le cloture et je vends (et donc si c'est un ordre de vente, je ne fais rien)
if (type==0){ Alert("Cloture BUY puis SELL)",TimeToStr(Time[a])); OrderClose(ticket,lots,Bid,spread+2); OrderSend(symb,OP_SELL,lots,Bid,spread,0,0); }
}
// S'il n'y a pas d'ordre de - de 4H, alors je vends
else { Alert("SELL",TimeToStr(Time[a])); OrderSend(symb,OP_SELL,lots,Bid,spread,0,0);}
}
}
return(0);
}