コーディングのヘルプ - ページ 263 1...256257258259260261262263264265266267268269270...786 新しいコメント Wigglesworth 2014.04.18 12:04 #2621 mladen: MrWigglesworth タイプ4としてdemaを追加したバージョンはこちら :ma__dema_crossover_with_arrow_and_email.mq4 素晴らしい!MLadenのご協力に感謝します。 ハッピーホリデー! techmac 2014.04.19 11:27 #2622 どなたか、コードからブローカーのGMTを自動的に(自分のGMTでなく)調べる方法をご存じないでしょうか? Mladen Rakic 2014.04.19 11:59 #2623 techmac: どなたか、コードからブローカーのGMTを自動的に(自分のGMTでなく)調べる方法をご存じないでしょうか? ブローカーのための自動的な方法はありません(すべてのデータで利用可能なそのような情報はありません - 新しいメタトレーダー4でもありません - 少なくとも私はそれを見つけていない)。 sunshineh 2014.04.19 14:10 #2624 mladenさん、こんにちは。 実際のチャートから数時間切り離すスクリプトについて質問させていただきました。今、私は各バーに遅延を入れ、私のチャートにタイムオフセットがあるようにしたいと思っています。 その方法でやってみましたが、うまくいきません(私が思っているような)。 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; } //--- } Coding help Indicators どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - Mladen Rakic 2014.04.19 15:47 #2625 sunshineh: mladenさん、こんにちは。実際のチャートから数時間切り離すスクリプトについて質問させていただきました。今、私は各バーに遅延を入れ、チャートにタイムオフセットを持たせたいと思っています。 その方法でやってみましたが、うまくいきません(私が思っているような)。 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; } //--- } ファイルに書き込む 前に、単純にrate.timeに 時間的なずれを加えて(加算は正でも負でもよい)、ファイルに書き込んだら、元の値に戻したらどうでしょう? Wigglesworth 2014.04.19 19:35 #2626 mladen: MrWigglesworth タイプ4としてDEMAを追加したバージョンはこちらです :ma__dema_crossover_with_arrow_and_email.mq4 MLadenさん、こんにちは。 本日はいかがお過ごしでしょうか?5DEMAと12DEMAのインジケータのチャートを添付します。また、チャート上にはあなたが改造したma+DEMAインジケータもあります。5-ma1と12-ma2に設定し、両方のMAにタイプ4(DEMA)を選択しました...矢印からわかるように、線と一致していないようです...何が悪いのか、何かお考えはありませんか?ありがとうございました。 ファイル: ma__dema_crossover_with_arrow_and_email.mq4 9 kb mladen_dema.jpg 86 kb Wigglesworth 2014.04.19 19:38 #2627 MrWigglesworth: MLadenさん、こんにちは。 本日はいかがお過ごしでしょうか?5DEMAと12DEMAのインディケータを使ったチャートを添付します。また、チャート上には、あなたが改造したma+DEMAインディケータもあります。5-ma1と12-ma2に設定し、両方のMAにタイプ4(DEMA)を選択しました...矢印からわかるように、線と一致していないようです...何が問題なのか、何かお考えがあれば教えてください。ありがとうございました。 ところで、私が使っているDEMAインジケータは こちらです。 ファイル: dema_1.mq4 4 kb Mladen Rakic 2014.04.19 19:39 #2628 MrWigglesworth: こんにちは、MLadenさん。本日はいかがお過ごしでしょうか?5DEMAと12DEMAのインディケータを使ったチャートを添付します。また、チャート上には、あなたが改造したma+DEMAインディケータもあります。5-ma1と12-ma2に設定し、両方のMAにタイプ4(DEMA)を選択しました...矢印からわかるように、線と一致していないようです...何が問題なのか、何かお考えがあれば教えてください。ありがとうございました。 比較のためにどのようなデモを使用していますか? 念のためですが、demaはemaのemaではなく、emaの2倍とemaのema.の差です。 その計算式は、ここにもあります。二重指数移動平均 - MetaTrader 5 ヘルプ よろしくお願いします。 Wigglesworth 2014.04.19 19:45 #2629 mladen: 比較のためにどのようなデモを使用していますか? 上記の投稿2631に添付されたDEMA.mq4を見てください...役に立ちましたか? Wigglesworth 2014.04.19 20:05 #2630 mladen: 比較のためにどのようなDEMAを使用していますか?注意:demaはemaのemaではなく、emaの2倍とemaのemaの差です。 そのための式は、ここでも見つけることができます。ダブル指数移動平均 - MetaTrader 5 ヘルプ よろしくお願いします。 5-SMA(赤)と5-DEMA(緑)の実用的な違いです。 ファイル: mladen_dema_1.jpg 78 kb 1...256257258259260261262263264265266267268269270...786 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
MrWigglesworth タイプ4としてdemaを追加したバージョンはこちら :ma__dema_crossover_with_arrow_and_email.mq4
素晴らしい!MLadenのご協力に感謝します。
ハッピーホリデー!
どなたか、コードからブローカーのGMTを自動的に(自分のGMTでなく)調べる方法をご存じないでしょうか?
どなたか、コードからブローカーのGMTを自動的に(自分のGMTでなく)調べる方法をご存じないでしょうか?
ブローカーのための自動的な方法はありません(すべてのデータで利用可能なそのような情報はありません - 新しいメタトレーダー4でもありません - 少なくとも私はそれを見つけていない)。
mladenさん、こんにちは。
実際のチャートから数時間切り離すスクリプトについて質問させていただきました。今、私は各バーに遅延を入れ、私のチャートにタイムオフセットがあるようにしたいと思っています。
その方法でやってみましたが、うまくいきません(私が思っているような)。
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;
}
//---
}
mladenさん、こんにちは。
実際のチャートから数時間切り離すスクリプトについて質問させていただきました。今、私は各バーに遅延を入れ、チャートにタイムオフセットを持たせたいと思っています。
その方法でやってみましたが、うまくいきません(私が思っているような)。
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;
}
//---
}
ファイルに書き込む 前に、単純にrate.timeに 時間的なずれを加えて(加算は正でも負でもよい)、ファイルに書き込んだら、元の値に戻したらどうでしょう?
MrWigglesworth タイプ4としてDEMAを追加したバージョンはこちらです :ma__dema_crossover_with_arrow_and_email.mq4
MLadenさん、こんにちは。
本日はいかがお過ごしでしょうか?5DEMAと12DEMAのインジケータのチャートを添付します。また、チャート上にはあなたが改造したma+DEMAインジケータもあります。5-ma1と12-ma2に設定し、両方のMAにタイプ4(DEMA)を選択しました...矢印からわかるように、線と一致していないようです...何が悪いのか、何かお考えはありませんか?ありがとうございました。
MLadenさん、こんにちは。
本日はいかがお過ごしでしょうか?5DEMAと12DEMAのインディケータを使ったチャートを添付します。また、チャート上には、あなたが改造したma+DEMAインディケータもあります。5-ma1と12-ma2に設定し、両方のMAにタイプ4(DEMA)を選択しました...矢印からわかるように、線と一致していないようです...何が問題なのか、何かお考えがあれば教えてください。ありがとうございました。
ところで、私が使っているDEMAインジケータは こちらです。
こんにちは、MLadenさん。
本日はいかがお過ごしでしょうか?5DEMAと12DEMAのインディケータを使ったチャートを添付します。また、チャート上には、あなたが改造したma+DEMAインディケータもあります。5-ma1と12-ma2に設定し、両方のMAにタイプ4(DEMA)を選択しました...矢印からわかるように、線と一致していないようです...何が問題なのか、何かお考えがあれば教えてください。ありがとうございました。
比較のためにどのようなデモを使用していますか?
念のためですが、demaはemaのemaではなく、emaの2倍とemaのema.の差です。
その計算式は、ここにもあります。二重指数移動平均 - MetaTrader 5 ヘルプ
よろしくお願いします。
比較のためにどのようなデモを使用していますか?
上記の投稿2631に添付されたDEMA.mq4を見てください...役に立ちましたか?
比較のためにどのようなDEMAを使用していますか?
注意:demaはemaのemaではなく、emaの2倍とemaのemaの差です。
そのための式は、ここでも見つけることができます。ダブル指数移動平均 - MetaTrader 5 ヘルプ
よろしくお願いします。5-SMA(赤)と5-DEMA(緑)の実用的な違いです。