Kodlama yardımı - sayfa 262

 

merhaba mladen,

Sanırım deliriyorum, işte PeriodConverter'dan değiştirilen kodum.

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

//| 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);

}

}

Yeni çevrimdışı grafiğimde göstermek istediğim çubukları seçmek için MainTime işlevini ekledim.

(Ayrıca zamanı bir saat kaydırdım ama bu önemli değil).

Şimdi bunu 0:00 (Başlangıç Zamanı) - 12:00 (Kapanış Zamanı) arasında 15046 çubuklu (M5) bir grafikte test ettiğimde

Doğru baskı mesajları alıyorum ve sonunda 7596 bar yazıldığı bilgisi.

Yani orijinal tablonun yaklaşık yarısı kadar ve bence her şey yolunda gitti!

Ancak ilgili çevrimdışı grafiği açtığımda, tam olarak tüm çubuklarla birlikte orijinal grafik gibi görünüyor.

Bu davranışı gerçekten anlayamıyorum?!?!

 
sunshineh:
merhaba mladen,

Sanırım deliriyorum, işte PeriodConverter'dan değiştirilen kodum.

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

//| 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);

}

}

Yeni çevrimdışı grafiğimde göstermek istediğim çubukları seçmek için MainTime işlevini ekledim.

(Ayrıca zamanı bir saat kaydırdım ama bu önemli değil).

Şimdi bunu 0:00 (Başlangıç Zamanı) - 12:00 (Kapanış Zamanı) arasında 15046 çubuklu (M5) bir grafikte test ettiğimde

Doğru baskı mesajları alıyorum ve sonunda 7596 bar yazıldığı bilgisi.

Yani orijinal tablonun yaklaşık yarısı kadar ve bence her şey yolunda gitti!

Ancak ilgili çevrimdışı grafiği açtığımda, tam olarak tüm çubuklarla birlikte orijinal grafik gibi görünüyor.

Bu davranışı gerçekten anlayamıyorum?!?!

Bunun nedeni, sembolün orijinal adını ve zaman çerçevesini kullanmanızdır. Sembol adını veya zaman çerçevesini değiştirmeniz gerekir (zaman çerçevesini değiştirmek daha iyidir, bu şekilde tüm kodunuz doğru sembol adını tanıyacaktır)

Zaman dilimini değiştirirseniz, bazı "yasal" zaman dilimlerini (1,5,15,30,60,...) kullanmadığınızdan emin olun.

 

Merhaba,

Bu adet, diğer bir adet ile birlikte hakkaniyet koruması için kullanılır. Öz sermayenin kar ve zarar limitlerini girebilirsiniz ve limite ulaşıldığında ea tüm emirleri kapatır ve diğer EA'yı kapatır.

Ea öz sermaye korumasıyla ilgili sorun, yalnızca mt4 maksimize edildiğinde çalışmasıdır. Küçültülmüş veya mt4 VPS'de çalışıyorsa , sınıra ulaşıldığında EA, EA'yı en üst düzeye çıkarana veya VPS'de oturum açana kadar siparişleri kapatmaya başlamaz. Giriş yaptığım veya maksimuma çıkardığım an kapanmaya başlar.

Teşekkürler.

Dosyalar:
 
DarkForex33:
Merhaba,

Bu adet, diğer adet ile kombinasyon halinde öz sermaye koruması için kullanılır. Öz sermayenin kar ve zarar limitlerini girebilirsiniz ve limite ulaşıldığında ea tüm emirleri kapatır ve diğer EA'yı kapatır.

Ea öz sermaye korumasıyla ilgili sorun, yalnızca mt4 maksimize edildiğinde çalışmasıdır. Küçültülmüş veya mt4 VPS'de çalışıyorsa, sınıra ulaşıldığında EA, EA'yı en üst düzeye çıkarana veya VPS'de oturum açana kadar siparişleri kapatmaya başlamaz. Giriş yaptığım veya maksimuma çıkardığım an kapanmaya başlar.

Teşekkürler.

PC'nizde de aynı şekilde mi davranıyor (VPS'de değil)?

PC'nizde aynı koşullarda sorunsuz çalışıyorsa , VPS'nizde bir sorun var demektir.

 
mladen:
Bunun nedeni, sembolün orijinal adını ve zaman çerçevesini kullanmanızdır. Sembol adını veya zaman çerçevesini değiştirmeniz gerekir (zaman çerçevesini değiştirmek daha iyidir, bu şekilde tüm kodunuz doğru sembol adını tanıyacaktır) Zaman çerçevesini değiştirirseniz, bazı "yasal" kullanmadığınızdan emin olun. zaman dilimleri (1,5,15,30,60,...)

Teşekkürler, değiştirdim

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

Ama çevrimdışı grafiği açarsam ..., M3 sadece "Güncellemeler Bekleniyor" gösteriyor... ve hiçbir şey olmuyor

 
sunshineh:
Teşekkürler, değiştirdim

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

Ama çevrimdışı grafiği açarsam ..., M3 sadece "Güncellemeler Bekleniyor" gösteriyor... ve hiçbir şey olmuyor

İlginç

Bunu göstergeniz için bir temel olarak kullanın. Bu işe yarıyor (temel olarak kullandığınız sürümde hatalar var gibi görünüyor)

Dosyalar:
 

Bana yardım et! bu adet için

Selamlar

lütfen uzmanlar

EA'da belirlenen kaybetmeyi durdur ve kar al

boşluklar.ex4

boşluklar.mq4

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

Merhaba,

Ekli göstergeye bir DEMA seçeneği eklemeye yardımcı olabilir misiniz?

Şu anda seçenekler şunlardır:

0= küçük

1=ema

2=smma

3=lwma

Eklemek istiyorum:

4= DEMA Bu mümkün mü? Çok teşekkürler!

 
MrWigglesworth:
Merhaba,

Ekli göstergeye bir DEMA seçeneği eklemeye yardımcı olabilir misiniz?

Şu anda seçenekler şunlardır:

0= küçük

1=ema

2=smma

3=lwma

Eklemek istiyorum:

4= DEMA Bu mümkün mü? Çok teşekkürler!

BayWigglesworth

Tip 4 olarak dema eklenmiş bir sürüm: ma__dema_crossover_with_arrow_and_email.mq4

 
amirreza132:
Selamlar

lütfen uzmanlar

EA'da belirlenen kaybetmeyi durdur ve kar al

boşluklar.ex4

boşluklar.mq4

amirreza132

Bu EA, boşlukları yakalamak için tasarlanmıştır ve boşluk olduğunda zaten kâr elde etmiştir.