KimIVの便利な機能 - ページ 84

 
vopros писал(а)>>

イゴール、こんにちは!

既存のインジケーターにサウンド通知を実装する方法を教えてください。

例えば、「ZigZag」では。線を引く瞬間に音が鳴るようにするには、どうしたらいいですか。

//| ZIG-ZAG_RPoint_v2_m.mq4 |https://www.mql5.com/ru/code/8739
//| 著作権 © 2004-2008, Poul_Trade_Forum |RPointインジケーターのコードを再現しました。RPoint」
//| アボリジニ&ハルコ||株式会社ゆめかな
//|http://forex.kbpauk.ru/| クオリティ・ジグザグ
//+------------------------------------------------------------------+

 

プログラマーの皆さん、Kimさんのインジケータを使ったEAを(安く)作ってください。

郵送での詳細

ウラジミール

vladmo@mail.ru

//+------------------------------------------------------------------+
//| i-MorningRange.mq4
//| キム・イゴールV.ことキムIV(KimIV)
//|http://www.kimiv.ru|
//| |
//|08.02.2006 朝のレンジ表示。
//+------------------------------------------------------------------+
#property copyright "Kim Igor V. aka KimIV"
#プロパティリンク "http://www.kimiv.ru"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 ブルー
#property indicator_color2 オレンジ

//------- 外部インジケータ・パラメータ --------------------------------.
extern string CheckTime = "08:00"; // 範囲指定時間のチェック
extern bool ShowHistory = True; // ヒストリーレベルを表示する。
extern inttern NumberOfDays = 5; // 履歴の日数
extern bool ShowComment = True; // コメントの表示

//------- インジケータ・バッファ ------------------------------------------------------------------------------.
double dBuf0[]、dBuf1[]。

//+------------------------------------------------------------------+
//| カスタムインジケータ初期化関数
//+------------------------------------------------------------------+
void init() {
SetIndexArrow(0, 217)を設定します。
SetIndexBuffer(0, dBuf0)を設定する。
SetIndexStyle (0, DRAW_ARROW, 1, 2)を設定します。
SetIndexArrow(1, 218)を設定します。
SetIndexBuffer(1, dBuf1)を設定する。
SetIndexStyle (1, DRAW_ARROW, 1, 2)を設定します。

DeleteLines()。
for (int i=0; i<2; i++) {.
ObjectCreate("HLine "+i, OBJ_HLINE, 0, 0,0);
}

for (i=0; i<NumberOfDays;i++){。
CreateLines("upLine "+i, indicator_color1);
CreateLines("dnLine "+i, indicator_color2);
}
}

//+------------------------------------------------------------------+
//|CreateLineオブジェクト||。
//| パラメータ: |
//| no - 行名|/
//| cl - 線の色 |.
//+------------------------------------------------------------------+
void CreateLines(string no, color cl) { (文字列, 色)
ObjectCreate(no, OBJ_TREND, 0, 0,0, 0,0)です。
ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID)です。
ObjectSet(no, OBJPROP_WIDTH, 1)です。
ObjectSet(no, OBJPROP_COLOR, cl)です。
ObjectSet(no, OBJPROP_RAY, False)です。
}

//+------------------------------------------------------------------+
//| カスタムインジケーター初期化関数
//+------------------------------------------------------------------+
void deinit() {
DeleteLines()。
Comment(")です。
}

//+------------------------------------------------------------------+
//| 横線を削除してください。
//+------------------------------------------------------------------+
void DeleteLines() {
for (int i=0; i<2; i++) {.
ObjectDelete("HLine "+i)。
}

for (i=0; i<NumberOfDays;i++){。
ObjectDelete("upLine "+i)。
ObjectDelete("dnLine "+i)。
}
}

//+------------------------------------------------------------------+
//| カスタムインジケータ反復関数
//+------------------------------------------------------------------+
void start() {
datetime t1, t2, dt;
double p1, p2;
int b1, b2; sd=0;

t1=StrToToTime(TimeToStr(CurTime(), TIME_DATE)+" 00:00");
t2=StrToTime(TimeToStr(CurTime()、TIME_DATE)+""+CheckTime);
b1=iBarShift(NULL、0、t1);
b2=iBarShift(NULL、0、t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=Low[Lowest(NULL,0,MODE_LOW,b1-b2+1,b2)]とする。

SetHLine(0, p1)を設定します。
SetHLine(1,p2)を設定します。

if (ShowHistory) {.
dt=decDateTradeDay(CurTime())。
for (int i=0; i<NumberOfDays;i++){。
DrawLines(dt, i);
dt=decDateTradeDay(dt)となります。
while (TimeDayOfWeek(dt)<1 || TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt)とする。
}
}

if (ShowComment) Comment("CheckTime="+CheckTime")。
}

//+------------------------------------------------------------------+
//| 現在の日の水平線の詳細を設定します。
//+------------------------------------------------------------------+

カラークリップ

if (pp!=EMPTY_VALUE) {.
switch (nl) {
case 0: cl=indicator_color1; break;
case 1: cl=indicator_color2; break;
}
ObjectSet("HLine "+nl, OBJPROP_COLOR, cl);
ObjectSet("HLine "+nl, OBJPROP_PRICE1, pp);
ObjectSet("HLine "+nl, OBJPROP_STYLE, STYLE_DOT);
}
}

//+------------------------------------------------------------------+
//| チャート上に線を引く
//| パラメータ: |
//| dt - 取引日の日付 |.
//| nd - その日の番号(オブジェクトの番号付けのため) |...
//+------------------------------------------------------------------+
void DrawLines(datetime dt, int nd) {.
datetime t1, t2;
double p1, p2;
int b1, b2;

t1=StrToToTime(TimeToStr(dt, TIME_DATE)+" 00:00");
t2=StrToTime(TimeToStr(dt,TIME_DATE)+""+CheckTime)です。
b1=iBarShift(NULL、0、t1);
b2=iBarShift(NULL、0、t2);
p1=High[Highest(NULL, 0, MODE_HIGH, b1-b2+1, b2)];
p2=Low[Lowest(NULL,0,MODE_LOW,b1-b2+1,b2)]とする。

ObjectSet("upLine "+nd, OBJPROP_TIME1, t1);
ObjectSet("upLine "+nd, OBJPROP_PRICE1, p1);
ObjectSet("upLine "+nd, OBJPROP_TIME2, t2);
ObjectSet("upLine "+nd, OBJPROP_PRICE2, p1);

ObjectSet("dnLine "+nd, OBJPROP_TIME1, t1);
ObjectSet("dnLine "+nd, OBJPROP_PRICE1, p2);
ObjectSet("dnLine "+nd, OBJPROP_TIME2, t2);
ObjectSet("dnLine "+nd, OBJPROP_PRICE2, p2);
}

//+------------------------------------------------------------------+
//|日付を1日分減らす||。
//| パラメータ: |
//| dt - 取引日の日付 |.
//+------------------------------------------------------------------+
datetime decDateTradeDay(datetime dt) {。
int ty=TimeYear(dt);
int tm=TimeMonth(dt);
int td=TimeDay(dt);
int th=TimeHour(dt);
int ti=TimeMinute(dt);

td--。
if (td==0) {.
tm--。
if (tm==0) {.
ty--。
tm=12とした。
}
if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
}
return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

 
イゴール、こんにちは!2人のエキスパート(エキスパート1とエキスパート2)がいます。エキスパート1は、新しい行から データを書き込むファイルを持っています。Expert2には、ファイル内の最大値と比較するための値が設定されています。この最大数を引き出せるように、よろしくお願いします。
 
Milka писал(а)>>
Expert1 と Expert2 の 2 つの Expert Advisor があります。 Expert1 は、新しい行からデータを書き込むファイルを持っています。Expert2には、ファイル内の最大値と比較するための値があります。この最大数を引き出せるように、よろしくお願いします。

エキスパート2では、すべての数値を配列に読み込んでから、ArrayMaximum() を使用します。

 
KimIV >> :

エキスパート2では、すべての数値を配列に読み込んでから、ArrayMaximum() を使用します。

どうしても配列にデータを読み込むことができない

 
Milka писал(а)>>

配列にデータを読み込むのに苦労しています。

このスレッドで私の配列関数をチェックしてください。例では、配列にデータを入れる必要があります。

 

イゴール、こんにちは!

チャート上にラインを作成すると(例えば -ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1] )、プラットフォームは無限長のDRIVEを描き、チュートリアルには - a TREADと書かれています。OBJ_TRENDを正しい長さのセグメントにする方法が見つからない。すべての光線を手動で変換したり、トリック(いわば三角形を描くこと)は論外と思われます。ヒントを教えてください・・・。

 
alexpert007 писал(а)>>

イゴール、こんにちは!

チャート上にラインを作成すると(例えば -ObjectCreate(tLine,OBJ_TREND,0,Time[3],Low[3],Time[1],Low[1] )、プラットフォームは無限長のDRIVEを描き、チュートリアルには - a TREADと書かれています。OBJ_TRENDを正しい長さのセグメントにする方法が見つからない。すべての光線を手動で変換したり、トリック(いわば三角形を描くこと)は論外と思われます。ヒント...

ObjectSet(tLine, OBJPROP_RAY, False)を使用します。

 

イゴールさん、こんにちは。

ポジションの部分決済、特にエラー131(P.49-50 auth.6232)については、すでに問題提起をさせていただきました。部分的に閉じるのは問題ないのですが、ログに131のエラーが表示され、EAを書き続けることができません。ブランチ「ポジションの部分的なクローズのための準備された関数はありますか」で、あなたの関数「ポジションの3分の1を閉じる」へのリンクを見つけましたが、与えられた関数をここ、このブランチで見つけられず、6232の質問に対するあなたの回答も見つけられませんでした。回答(P.50)により、部分的に解決することができました。ログはエラーを発生させませんでしたが、最初のオープンポジションが要求通りに閉じられないという副作用が発生しました。

比較のため、最初のチャートは「あるべき姿」で閉じていますが、131のエラーが常に発生しています。

と、エラーはないものの、最初の(そしてなぜか最初の)オープンポジションのクローズが正しくないチャートです。

 

クロージングコードはこんな感じでした。

ファイル:
codv1.mq4  8 kb
理由: