Kodlama yardımı - sayfa 263

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

Harika! Yardımın için çok teşekkürler MLaden

Mutlu tatiller!!

 

Aracının GMT'sini (kendi GMT'mi değil) koddan otomatik olarak nasıl öğrenebilirim?

 
techmac:
Aracının GMT'sini (kendi GMT'mi değil) koddan otomatik olarak nasıl öğrenebilirim?

Broker için otomatik bir yol yok (tüm verilerde böyle bir bilgi yok - yeni metatrader 4'te bile - en azından ben bulamadım)

 

merhaba mladen,

Gerçek tablodan birkaç saat uzaklaşan bir senaryo hakkında bir soru sordum. Şimdi her çubuğa bir gecikme koymak istiyorum, böylece grafiğimde bir zaman kayması var.

O şekilde denedim ama olmuyor (sanırım)

input int TimeDelay_Minutes = 60;

input int StartHour = 8;

input int StartMinute = 0;

input int CloseHour = 16;

input int CloseMinute = 30;

int InpPeriodMultiplier=1; // Period multiplier factor

int ExtHandle=-1;

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

//| script program start function |

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

void OnStart()

{

datetime time0;

ulong last_fpos=0;

long last_volume=0;

int i, start_pos, periodseconds;

int hwnd=0, cnt=0;

//---- History header

int version=401;

string c_copyright;

string c_symbol=Symbol();

int i_period=Period()*InpPeriodMultiplier;

int i_digits=Digits;

int i_unused[13];

MqlRates rate;

//---

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

if(ExtHandle<0)

return;

ArrayInitialize(i_unused,0);

//--- write history file header

FileWriteInteger(ExtHandle, version, LONG_VALUE);

FileWriteString(ExtHandle, c_copyright, 64);

FileWriteString(ExtHandle, c_symbol, 12);

FileWriteInteger(ExtHandle, 3, LONG_VALUE);

FileWriteInteger(ExtHandle, i_digits, LONG_VALUE);

FileWriteInteger(ExtHandle, 0, LONG_VALUE); //timesign

FileWriteInteger(ExtHandle, 0, LONG_VALUE); //last_sync

FileWriteArray(ExtHandle, i_unused, 0, 13);

//--- write history file

periodseconds=i_period*60;

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]/periodseconds;

rate.time*=periodseconds;

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

{

if(IsStopped())

break;

time0=Time- 1 * 60 *TimeDelay_Minutes;

//--- history may be updated

if(i==0)

{

//--- modify index if history was updated

if(RefreshRates())

i=iBarShift(NULL,0,time0);

}

//---

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

{

if(i==0)

{

rate.time=time0/periodseconds; //NEU

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+periodseconds)

{

rate.time=time0/periodseconds;

rate.time*=periodseconds;

rate.open=Open;

rate.low=Low;

rate.high=High;

rate.close=Close;

rate.tick_volume=last_volume;

}

}

else if(MainTime(time0)==true)

{

rate.time=time0/periodseconds; //NEU

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]- 1 * 60 *TimeDelay_Minutes;

FileSeek(ExtHandle,last_fpos,SEEK_SET);

//--- is there current bar?

if(time0<rate.time+periodseconds && 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/periodseconds;

rate.time*=periodseconds;

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;

}

//---

}

 
sunshineh:
merhaba mladen,

Gerçek tablodan birkaç saat uzaklaşan bir senaryo hakkında bir soru sordum. Şimdi her çubuğa bir gecikme koymak istiyorum, böylece grafiğimde bir zaman kayması var.

O şekilde denedim ama olmuyor (sanırım)

input int TimeDelay_Minutes = 60;

input int StartHour = 8;

input int StartMinute = 0;

input int CloseHour = 16;

input int CloseMinute = 30;

int InpPeriodMultiplier=1; // Period multiplier factor

int ExtHandle=-1;

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

//| script program start function |

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

void OnStart()

{

datetime time0;

ulong last_fpos=0;

long last_volume=0;

int i, start_pos, periodseconds;

int hwnd=0, cnt=0;

//---- History header

int version=401;

string c_copyright;

string c_symbol=Symbol();

int i_period=Period()*InpPeriodMultiplier;

int i_digits=Digits;

int i_unused[13];

MqlRates rate;

//---

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

if(ExtHandle<0)

return;

ArrayInitialize(i_unused,0);

//--- write history file header

FileWriteInteger(ExtHandle, version, LONG_VALUE);

FileWriteString(ExtHandle, c_copyright, 64);

FileWriteString(ExtHandle, c_symbol, 12);

FileWriteInteger(ExtHandle, 3, LONG_VALUE);

FileWriteInteger(ExtHandle, i_digits, LONG_VALUE);

FileWriteInteger(ExtHandle, 0, LONG_VALUE); //timesign

FileWriteInteger(ExtHandle, 0, LONG_VALUE); //last_sync

FileWriteArray(ExtHandle, i_unused, 0, 13);

//--- write history file

periodseconds=i_period*60;

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]/periodseconds;

rate.time*=periodseconds;

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

{

if(IsStopped())

break;

time0=Time- 1 * 60 *TimeDelay_Minutes;

//--- history may be updated

if(i==0)

{

//--- modify index if history was updated

if(RefreshRates())

i=iBarShift(NULL,0,time0);

}

//---

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

{

if(i==0)

{

rate.time=time0/periodseconds; //NEU

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+periodseconds)

{

rate.time=time0/periodseconds;

rate.time*=periodseconds;

rate.open=Open;

rate.low=Low;

rate.high=High;

rate.close=Close;

rate.tick_volume=last_volume;

}

}

else if(MainTime(time0)==true)

{

rate.time=time0/periodseconds; //NEU

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]- 1 * 60 *TimeDelay_Minutes;

FileSeek(ExtHandle,last_fpos,SEEK_SET);

//--- is there current bar?

if(time0<rate.time+periodseconds && 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/periodseconds;

rate.time*=periodseconds;

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;

}

//---

}

Neden dosyaya yazmadan önce rate.time'a biraz zaman kaydırma eklemiyorsunuz (toplama pozitif veya negatif olabilir) ve sonra, dosyayı dosyaya yazdığınızda, orijinal değerini geri döndürmüyorsunuz?

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

Merhaba Bay MLaden,

Bugün nasılsın? Ekli 5 ve 12 DEMA göstergeli bir çizelgedir. Ayrıca çizelgede değiştirdiğiniz ma+DEMA göstergesidir. 5-ma1 ve 12-ma2 olarak ayarlanmıştır ve her iki MA için de type 4 (DEMA) seçilmiştir...Oklardan da anlaşılacağı gibi, çizgilerle uyuşmuyorlar...Ne olduğu hakkında herhangi bir düşünceniz yok. yanlış? Çok teşekkürler!

 
MrWigglesworth:
Merhaba Bay MLaden,

Bugün nasılsın? Ekli 5 ve 12 DEMA göstergeli bir çizelgedir. Ayrıca çizelgede değiştirdiğiniz ma+DEMA göstergesidir. 5-ma1 ve 12-ma2 olarak ayarlanmıştır ve her iki MA için de type 4 (DEMA) seçilmiştir...Oklardan da anlaşılacağı gibi, çizgilerle uyuşmuyorlar...Ne olduğu hakkında herhangi bir düşünceniz yok. yanlış? Çok teşekkürler!

Oh ve bu arada, yardımcı olursa kullandığım DEMA göstergesi

Dosyalar:
dema_1.mq4  4 kb
 
MrWigglesworth:
Merhaba Bay MLaden,

Bugün nasılsın? Ekli 5 ve 12 DEMA göstergeli bir çizelgedir. Ayrıca çizelgede değiştirdiğiniz ma+DEMA göstergesidir. 5-ma1 ve 12-ma2 olarak ayarlanmıştır ve her iki MA için de type 4 (DEMA) seçilmiştir...Oklardan da anlaşılacağı gibi, çizgilerle uyuşmuyorlar...Ne olduğu hakkında herhangi bir düşünceniz yok. yanlış? Çok teşekkürler!

Karşılaştırma için hangi dema'yı kullanıyorsunuz?

Hatırlatmak gerekirse: dema, ema'nın ema'sı değil, 2 x ema ve ema farkıdır. ema'nın

Bunun formülü burada bile bulunabilir : Çift Üstel Hareketli Ortalama - MetaTrader 5 Yardım

Saygılarımızla

 
mladen:
Karşılaştırma için hangi dema'yı kullanıyorsunuz?

Ekli DEMA .mq4 ile yukarıdaki 2631 numaralı gönderiye bakın... Bu yardımcı olur mu?

 
mladen:
Karşılaştırma için hangi dema'yı kullanıyorsunuz?

Hatırlatmak gerekirse: dema, ema'nın ema'sı değil, 2 x ema ve ema farkıdır. ema'nın

Bunun formülü burada bile bulunabilir : Çift Üstel Hareketli Ortalama - MetaTrader 5 Yardım

Saygılarımızla

Evet, formülü hiç ezberlemesem de DEMA'ya aşinayım...İşte 5-SMA (kırmızı) ve 5-DEMA (yeşil) arasındaki pratik fark

Dosyalar: