Aide au codage - page 262

 

Salut mladen,

Je pense que je deviens fou, voici mon code modifié du PeriodConverter.

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

//| PeriodConverter.mq4 |

//| Copyright 2006-2014, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

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

#property copyright "2006-2014, MetaQuotes Software Corp."

#property link "http://www.mql4.com"

#property description "Period Converter to updated format of history base"

#property strict

#property show_inputs

#include

input int StartHour = 9;

input int StartMinute = 0;

input int CloseHour = 17;

input int CloseMinute = 30;

int ExtHandle=-1;

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

//| script program start function |

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

void OnStart()

{

datetime time0;

ulong last_fpos=0;

long last_volume=0;

int i,start_pos;

int hwnd=0,cnt=0;

//---- History header

int file_version=401;

string c_copyright;

string c_symbol=Symbol();

int i_period=Period();

int i_digits=Digits;

int i_unused[13];

MqlRates rate;

//---

ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

if(ExtHandle<0)

return;

c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";

ArrayInitialize(i_unused,0);

//--- write history file header

FileWriteInteger(ExtHandle,file_version,LONG_VALUE);

FileWriteString(ExtHandle,c_copyright,64);

FileWriteString(ExtHandle,c_symbol,12);

FileWriteInteger(ExtHandle,i_period,LONG_VALUE);

FileWriteInteger(ExtHandle,i_digits,LONG_VALUE);

FileWriteInteger(ExtHandle,0,LONG_VALUE);

FileWriteInteger(ExtHandle,0,LONG_VALUE);

FileWriteArray(ExtHandle,i_unused,0,13);

//--- write history file

start_pos=Bars-1;

rate.open=Open[start_pos];

rate.low=Low[start_pos];

rate.high=High[start_pos];

rate.tick_volume=(long)Volume[start_pos];

rate.spread=0;

rate.real_volume=0;

//--- normalize open time

rate.time=Time[start_pos];

for(i=start_pos-1; i>=0; i--)

{

if(IsStopped())

break;

time0=Time;

//--- history may be updated

if(i==0)

{

//--- modify index if history was updated

if(RefreshRates())

i=iBarShift(NULL,0,time0);

}

//---

if((time0>=rate.time || i==0) && MainTime(time0)==true)

{

if(i==0)

{

rate.tick_volume+=(long)Volume[0];

if(rate.low>Low[0])

rate.low=Low[0];

if(rate.high<High[0])

rate.high=High[0];

rate.close=Close[0];

}

last_fpos=FileTell(ExtHandle);

last_volume=(long)Volume;

FileWriteStruct(ExtHandle,rate);

cnt++;

if(time0>=rate.time)

{

rate.time=time0;

rate.open=Open;

rate.low=Low;

rate.high=High;

rate.close=Close;

rate.tick_volume=last_volume;

}

}

else if(MainTime(time0)==true)

{

rate.tick_volume+=(long)Volume;

if(rate.low>Low)

rate.low=Low;

if(rate.high<High)

rate.high=High;

rate.close=Close;

}

}

FileFlush(ExtHandle);

Print(cnt," record(s) written");

//--- collect incoming ticks

datetime last_time=LocalTime()-5;

while(!IsStopped())

{

datetime cur_time=LocalTime();

//--- check for new rates

if(RefreshRates())

{

time0=Time[0];

FileSeek(ExtHandle,last_fpos,SEEK_SET);

//--- is there current bar?

if(time0<rate.time && MainTime(time0)==true)

{

rate.tick_volume+=(long)Volume[0]-last_volume;

last_volume=(long)Volume[0];

if(rate.low>Low[0])

rate.low=Low[0];

if(rate.high<High[0])

rate.high=High[0];

rate.close=Close[0];

}

else if(MainTime(time0)==true)

{

//--- no, there is new bar

rate.tick_volume+=(long)Volume[1]-last_volume;

if(rate.low>Low[1])

rate.low=Low[1];

if(rate.high<High[1])

rate.high=High[1];

//--- write previous bar remains

FileWriteStruct(ExtHandle,rate);

last_fpos=FileTell(ExtHandle);

//----

rate.time=time0;

rate.open=Open[0];

rate.low=Low[0];

rate.high=High[0];

rate.close=Close[0];

rate.tick_volume=(long)Volume[0];

last_volume=rate.tick_volume;

}

//----

FileWriteStruct(ExtHandle,rate);

FileFlush(ExtHandle);

//---

if(hwnd==0)

{

hwnd=WindowHandle(Symbol(),i_period);

if(hwnd!=0)

Print("Chart window detected");

}

//--- refresh window not frequently than 1 time in 2 seconds

if(hwnd!=0 && cur_time-last_time>=2)

{

PostMessageA(hwnd,WM_COMMAND,33324,0);

last_time=cur_time;

}

}

Sleep(50);

}

//---

}

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

//| |

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

void OnDeinit(const int reason)

{

//---

if(ExtHandle>=0)

{

FileClose(ExtHandle);

ExtHandle=-1;

}

//---

}

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

bool MainTime(datetime time0)

{

datetime temp = time0 - 1 * 60 *60;

if(((TimeHour(temp) == StartHour && TimeMinute(temp) >= StartMinute) ||

TimeHour(temp) > StartHour) &&

(TimeHour(temp)< CloseHour ||

(TimeHour(temp) == CloseHour && TimeMinute(temp) < CloseMinute)))

{

Print(".......return (true) - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));

return(true);

}

else

{

Print("+++++++false - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));

return(false);

}

}

J'ai ajouté la fonction MainTime pour sélectionner les barres que je veux afficher dans mon nouveau graphique hors ligne.

(J'ai aussi déplacé l'heure d'une heure mais ce n'est pas important).

Maintenant, lorsque je teste ceci sur un graphique avec 15046 barres (M5) de 0:00 (Starttime) - 12:00 (Closetime)

J'obtiens des messages d'impression corrects et à la fin l'information que 7596 barres ont été écrites.

C'est donc environ la moitié du graphique original et je pense que tout a bien fonctionné !

Mais lorsque j'ouvre le graphique hors ligne correspondant, il ressemble exactement au graphique d'origine avec toutes les barres.

Je n'arrive pas à comprendre ce comportement !

 
sunshineh:
Salut mladen,

Je pense que je deviens fou, voici mon code modifié du PeriodConverter.

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

//| PeriodConverter.mq4 |

//| Copyright 2006-2014, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

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

#property copyright "2006-2014, MetaQuotes Software Corp."

#property link "http://www.mql4.com"

#property description "Period Converter to updated format of history base"

#property strict

#property show_inputs

#include

input int StartHour = 9;

input int StartMinute = 0;

input int CloseHour = 17;

input int CloseMinute = 30;

int ExtHandle=-1;

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

//| script program start function |

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

void OnStart()

{

datetime time0;

ulong last_fpos=0;

long last_volume=0;

int i,start_pos;

int hwnd=0,cnt=0;

//---- History header

int file_version=401;

string c_copyright;

string c_symbol=Symbol();

int i_period=Period();

int i_digits=Digits;

int i_unused[13];

MqlRates rate;

//---

ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

if(ExtHandle<0)

return;

c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";

ArrayInitialize(i_unused,0);

//--- write history file header

FileWriteInteger(ExtHandle,file_version,LONG_VALUE);

FileWriteString(ExtHandle,c_copyright,64);

FileWriteString(ExtHandle,c_symbol,12);

FileWriteInteger(ExtHandle,i_period,LONG_VALUE);

FileWriteInteger(ExtHandle,i_digits,LONG_VALUE);

FileWriteInteger(ExtHandle,0,LONG_VALUE);

FileWriteInteger(ExtHandle,0,LONG_VALUE);

FileWriteArray(ExtHandle,i_unused,0,13);

//--- write history file

start_pos=Bars-1;

rate.open=Open[start_pos];

rate.low=Low[start_pos];

rate.high=High[start_pos];

rate.tick_volume=(long)Volume[start_pos];

rate.spread=0;

rate.real_volume=0;

//--- normalize open time

rate.time=Time[start_pos];

for(i=start_pos-1; i>=0; i--)

{

if(IsStopped())

break;

time0=Time;

//--- history may be updated

if(i==0)

{

//--- modify index if history was updated

if(RefreshRates())

i=iBarShift(NULL,0,time0);

}

//---

if((time0>=rate.time || i==0) && MainTime(time0)==true)

{

if(i==0)

{

rate.tick_volume+=(long)Volume[0];

if(rate.low>Low[0])

rate.low=Low[0];

if(rate.high<High[0])

rate.high=High[0];

rate.close=Close[0];

}

last_fpos=FileTell(ExtHandle);

last_volume=(long)Volume;

FileWriteStruct(ExtHandle,rate);

cnt++;

if(time0>=rate.time)

{

rate.time=time0;

rate.open=Open;

rate.low=Low;

rate.high=High;

rate.close=Close;

rate.tick_volume=last_volume;

}

}

else if(MainTime(time0)==true)

{

rate.tick_volume+=(long)Volume;

if(rate.low>Low)

rate.low=Low;

if(rate.high<High)

rate.high=High;

rate.close=Close;

}

}

FileFlush(ExtHandle);

Print(cnt," record(s) written");

//--- collect incoming ticks

datetime last_time=LocalTime()-5;

while(!IsStopped())

{

datetime cur_time=LocalTime();

//--- check for new rates

if(RefreshRates())

{

time0=Time[0];

FileSeek(ExtHandle,last_fpos,SEEK_SET);

//--- is there current bar?

if(time0<rate.time && MainTime(time0)==true)

{

rate.tick_volume+=(long)Volume[0]-last_volume;

last_volume=(long)Volume[0];

if(rate.low>Low[0])

rate.low=Low[0];

if(rate.high<High[0])

rate.high=High[0];

rate.close=Close[0];

}

else if(MainTime(time0)==true)

{

//--- no, there is new bar

rate.tick_volume+=(long)Volume[1]-last_volume;

if(rate.low>Low[1])

rate.low=Low[1];

if(rate.high<High[1])

rate.high=High[1];

//--- write previous bar remains

FileWriteStruct(ExtHandle,rate);

last_fpos=FileTell(ExtHandle);

//----

rate.time=time0;

rate.open=Open[0];

rate.low=Low[0];

rate.high=High[0];

rate.close=Close[0];

rate.tick_volume=(long)Volume[0];

last_volume=rate.tick_volume;

}

//----

FileWriteStruct(ExtHandle,rate);

FileFlush(ExtHandle);

//---

if(hwnd==0)

{

hwnd=WindowHandle(Symbol(),i_period);

if(hwnd!=0)

Print("Chart window detected");

}

//--- refresh window not frequently than 1 time in 2 seconds

if(hwnd!=0 && cur_time-last_time>=2)

{

PostMessageA(hwnd,WM_COMMAND,33324,0);

last_time=cur_time;

}

}

Sleep(50);

}

//---

}

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

//| |

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

void OnDeinit(const int reason)

{

//---

if(ExtHandle>=0)

{

FileClose(ExtHandle);

ExtHandle=-1;

}

//---

}

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

bool MainTime(datetime time0)

{

datetime temp = time0 - 1 * 60 *60;

if(((TimeHour(temp) == StartHour && TimeMinute(temp) >= StartMinute) ||

TimeHour(temp) > StartHour) &&

(TimeHour(temp)< CloseHour ||

(TimeHour(temp) == CloseHour && TimeMinute(temp) < CloseMinute)))

{

Print(".......return (true) - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));

return(true);

}

else

{

Print("+++++++false - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));

return(false);

}

}

J'ai ajouté la fonction MainTime pour sélectionner les barres que je veux afficher dans mon nouveau graphique hors ligne.

(J'ai aussi déplacé l'heure d'une heure mais ce n'est pas important).

Maintenant, lorsque je teste ceci sur un graphique avec 15046 barres (M5) de 0:00 (Starttime) - 12:00 (Closetime)

J'obtiens des messages d'impression corrects et à la fin l'information que 7596 barres ont été écrites.

C'est donc environ la moitié du graphique original et je pense que tout a bien fonctionné !

Mais lorsque j'ouvre le graphique hors ligne correspondant, il ressemble exactement au graphique original avec toutes les barres.

Je ne peux pas vraiment comprendre ce comportement ? !?!

C'est parce que vous utilisez le nom et la période d'origine du symbole. Vous devez changer soit le nom du symbole, soit le cadre temporel (il est préférable de changer le cadre temporel, de cette façon tout votre code devrait reconnaître le nom correct du symbole).

Si vous changez le cadre temporel, assurez-vous que vous n'utilisez pas certains cadres temporels "légaux" (1,5,15,30,60,...).

 

Salut,

Cet ea est utilisé pour la protection de l'équité en combinaison avec d'autres ea. Vous pouvez entrer les limites de profit et de perte de l'équité et lorsque la limite est atteinte, l'ea fermera tous les ordres et fermera l'autre EA.

Le problème avec l'ea equity guard est qu'il ne fonctionne que lorsque mt4 est maximisé. S'il est minimisé ou si mt4 fonctionne sur un VPS, lorsque la limite est atteinte, l'EA ne commencera pas à fermer les ordres jusqu'à ce que je maximise l'EA ou que je me connecte sur le VPS. Dès que je me connecte ou que j'agrandis l'EA commence à fermer.

Merci.

Dossiers :
 
DarkForex33:
Bonjour,

Cet ea est utilisé pour la protection de l'équité en combinaison avec d'autres ea. Vous pouvez entrer les limites de profit et de perte de l'équité et lorsque la limite est atteinte, l'ea fermera tous les ordres et fermera l'autre EA.

Le problème avec l'ea equity guard est qu'il ne fonctionne que lorsque mt4 est maximisé. S'il est minimisé ou si mt4 fonctionne sur un VPS, lorsque la limite est atteinte, l'EA ne commencera pas à fermer les ordres jusqu'à ce que je maximise l'EA ou que je me connecte sur le VPS. Dès que je me connecte ou que j'agrandis EA commence à fermer.

Merci.

Se comporte-t-il de la même manière sur votre PC (pas sur le VPS) ?

S'il fonctionne correctement sur votre PC dans les mêmes conditions, alors vous avez un problème avec votre VPS.

 
mladen:
C'est parce que vous utilisez le nom et la période d'origine du symbole. Vous devez changer soit le nom du symbole, soit le cadre temporel (il est préférable de changer le cadre temporel, de cette façon tout votre code devrait reconnaître le nom correct du symbole). Si vous changez le cadre temporel, assurez-vous que vous n'utilisez pas certains cadres temporels "légaux" (1,5,15,30,60,...).

Merci, j'ai changé

ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)3+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

and

FileWriteInteger(ExtHandle,3,LONG_VALUE);

Mais si j'ouvre le graphique hors ligne ...,M3 il affiche seulement "Waiting for Updates"... et rien ne se passe.

 
sunshineh:
Merci, j'ai changé

ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)3+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

and

FileWriteInteger(ExtHandle,3,LONG_VALUE);

Mais si j'ouvre le graphique hors ligne ...,M3, il ne montre que "Waiting for Updates" ... et rien ne se passe.

Intéressant

Utilisez celle-ci comme base pour votre indicateur. Celle-ci fonctionne (il semble que la version que vous avez utilisée comme base comporte des erreurs).

Dossiers :
 

Aidez-moi ! pour cette ea

Salutations

S'il vous plaît, experts

Définir dans l'EA un stop loss et un take profit

gaps.ex4

gaps.mq4

Dossiers :
gaps.ex4  6 kb
gaps.mq4  4 kb
 

Bonjour,

Pouvez-vous nous aider à ajouter une option DEMA à l'indicateur ci-joint ?

Actuellement les options sont :

0= sma

1=ema

2=smma

3=lwma

Je voudrais ajouter :

4= DEMAest-ce possible ?Merci beaucoup !

 
MrWigglesworth:
Bonjour,

Pouvez-vous aider à ajouter une option DEMA à l'indicateur ci-joint ?

Actuellement les options sont :

0= sma

1=ema

2=smma

3=lwma

Souhaite ajouter :

4= DEMAis celaest-il possible ?Merci beaucoup !

MrWigglesworth

Voici une version avec dema ajouté comme type 4 : ma__dema_crossover_with_arrow_and_email.mq4

 
amirreza132:
Salutations

S'il vous plaît, experts

définir dans l'EA un stop lose et un take profit

gaps.ex4

gaps.mq4

amirreza132

Cet EA est conçu pour attraper les gaps et il a déjà un take profit dans les cas où le gap se produit.

Raison: