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

 

SetChannel()関数を使用します。

この関数は、OBJ_CHANNEL オブジェクトを現在のチャート上の等距離チャネルに設定します。

  • cl- オブジェクトの色.オブリガードパラメーター。
  • t[]- 時間軸上の3つの 値の配列.必須のパラメータ です.
  • p[]- 価格軸の3つの値の配列。必須の パラメータです。
  • nm- オブジェクト名デフォルト値である""渡すと現在のバーのオープン時間が名前として使用さ れます。
  • ry-BOW プロパティのフラグ。 デフォルト値はFalse です。
  • st- 線のスタイル.有効な値は、STYLE_SOLID(デフォルト)、STYLE_DASHSTYLE_DOTSTYLE_DASHDOT です。
  • wd- 線幅.デフォルトは1 です。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2013                                                     |
//|  Описание : Установка объекта OBJ_CHANNEL Равноудаленный канал.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl  - цвет линии                                                        |
//|    t[] - время открытия бара                                               |
//|    p[] - ценовой уровень                                                   |
//|    nm  - наименование              (  ""  - время открытия текущего бара)  |
//|    ry  - луч                       (False - по умолчанию)                  |
//|    st  - стиль линии               (  0   - простая линия)                 |
//|    wd  - ширина линии              (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetChannel(color cl, datetime& t[], double& p[],
                string nm="", bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t[0]<=0) t[0]=Time[20];
  if (p[0]<=0) p[0]=High[20];
  if (t[1]<=0) t[1]=Time[0];
  if (p[1]<=0) p[1]=High[0];
  if (t[2]<=0) t[2]=Time[15];
  if (p[2]<=0) p[2]=Low[15];
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_CHANNEL, 0, 0,0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t[0]);
  ObjectSet(nm, OBJPROP_PRICE1, p[0]);
  ObjectSet(nm, OBJPROP_TIME2 , t[1]);
  ObjectSet(nm, OBJPROP_PRICE2, p[1]);
  ObjectSet(nm, OBJPROP_TIME3 , t[2]);
  ObjectSet(nm, OBJPROP_PRICE3, p[2]);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
SetChannel()関数をテストするスクリプトを添付します。
ファイル:
 

こんにちは。

KimIV https://forum.mql4.com/ru/38949/page6#434255 のSetTLine()関数を使用しています。問題は、2行(上下)必要なのですが、私の場合、うまくいきません。他の変数を使って別の関数SetTLine1()を作りましたが、まだ動きません。どうすればいいのか?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
datetime d0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
datetime d1=TimeCurrent()-24*60*60;
while (TimeDayOfWeek(d1)==0 || TimeDayOfWeek(d1)==6) d1-=24*60*60;
d1=StrToTime(TimeToStr(d1, TIME_DATE));
datetime d2=d1-24*60*60;
while (TimeDayOfWeek(d2)==0 || TimeDayOfWeek(d2)==6) d2-=24*60*60;
d2=StrToTime(TimeToStr(d2, TIME_DATE));
int b2=iBarShift(NULL, 0, d2);     // номер бара начала второго дня
int b1=iBarShift(NULL, 0, d1);     // номер бара начала первого дня
int b0=iBarShift(NULL, 0, d0);     // номер бара начала текущего дня
int n2=iLowest(NULL, 0, MODE_LOW, b2-b1-1, b1);
int n1=iLowest(NULL, 0, MODE_LOW, b1-b0-1, b0);
datetime t1=Time[n2];
double   p1=Low[n2];
datetime t2=Time[n1];
double   p2=Low[n1];
SetTLine(Magenta, "", t1, p1, t2, p2, True, STYLE_SOLID, 3);   


datetime di0=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));
datetime di1=TimeCurrent()-24*60*60;
while (TimeDayOfWeek(di1)==0 || TimeDayOfWeek(di1)==6) di1-=24*60*60;
di1=StrToTime(TimeToStr(di1, TIME_DATE));
datetime di2=di1-24*60*60;
while (TimeDayOfWeek(di2)==0 || TimeDayOfWeek(di2)==6) di2-=24*60*60;
di2=StrToTime(TimeToStr(di2, TIME_DATE));
int bi2=iBarShift(NULL, 0, di2);     // номер бара начала второго дня
int bi1=iBarShift(NULL, 0, di1);     // номер бара начала первого дня
int bi0=iBarShift(NULL, 0, di0);     // номер бара начала текущего дня
int ni2=iHighest(NULL, 0, MODE_HIGH, bi2-bi1-1, bi1);
int ni1=iHighest(NULL, 0, MODE_HIGH, bi1-bi0-1, bi0);
datetime t1i=Time[ni2];
double   p1i=High[ni2];
datetime t2i=Time[ni1];
double   p2i=High[ni1];
SetTLine1(Magenta, "", t1i, p1i, t2i, p2i, True, STYLE_SOLID, 3);
//----
   return(0);
  }
//+------------------------------------------------------------------+

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка объекта OBJ_TREND трендовая линия                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - цвет линии                                                         |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - по умолчанию)                  |
//|    st - стиль линии                (  0   - простая линия)                 |
//|    wd - ширина линии               (  1   - по умолчанию)                  |
//+----------------------------------------------------------------------------+
void SetTLine(color cl, string nm="",
              datetime t1=0, double p1=0, datetime t2=0, double p2=0,
              bool ry=False, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (t1<=0) t1=Time[10];
  if (p1<=0) p1=Low[10];
  if (t2<=0) t2=Time[0];
  if (p2<=0) p2=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nm, OBJPROP_TIME1 , t1);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_TIME2 , t2);
  ObjectSet(nm, OBJPROP_PRICE2, p2);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_RAY   , ry);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}


void SetTLine1(color cli, string nmi="",
              datetime t1i=0, double p1i=0, datetime t2i=0, double p2i=0,
              bool ryi=False, int sti=0, int wdi=1) {
  if (nmi=="") nmi=DoubleToStr(Time[0], 0);
  if (t1i<=0) t1i=Time[10];
  if (p1i<=0) p1i=Low[10];
  if (t2i<=0) t2i=Time[0];
  if (p2i<=0) p2i=Bid;
  if (ObjectFind(nmi)<0) ObjectCreate(nmi, OBJ_TREND, 0, 0,0, 0,0);
  ObjectSet(nmi, OBJPROP_TIME1 , t1i);
  ObjectSet(nmi, OBJPROP_PRICE1, p1i);
  ObjectSet(nmi, OBJPROP_TIME2 , t2i);
  ObjectSet(nmi, OBJPROP_PRICE2, p2i);
  ObjectSet(nmi, OBJPROP_COLOR , cli);
  ObjectSet(nmi, OBJPROP_RAY   , ryi);
  ObjectSet(nmi, OBJPROP_STYLE , sti);
  ObjectSet(nmi, OBJPROP_WIDTH , wdi);
}
 

2つの機能を作る必要はありません。異なるパラメータを持つものを呼び出す必要があります。2つの関数を呼び出したが、両方の関数に空のオブジェクト名LINEを渡している。デフォルトでは、SetTLine()関数は、現在のバーのオープン 時間を名前として設定します。この場合、SetTLine()を何度呼び出しても、同じ名前のオブジェクト、つまりONE LINEオブジェクト が生成されてしまうことになるのです。

あなたのコードを作り直しました。添付ファイルをご覧ください。そして、あなたのコードが描くものの例として、絵があります。

ファイル:
 
KimIV:

2つの機能を作る必要はありません。異なるパラメータを持つものを呼び出す必要があります。2つの関数を呼び出したが、両方の関数に空のオブジェクト名LINEを渡している。デフォルトでは、SetTLine()関数は、現在のバーのオープン時間を名前として設定します。この場合、SetTLine()を何度呼び出しても、同じ名前のオブジェクト、つまりONE LINEオブジェクト が生成されることになります。

あなたのコードを作り直しました。添付ファイルをご覧ください。そして、あなたのコードが描くものの例として、絵があります。


なるほど、ありがとうございます。

 

こんにちは。

あなたの仕事にBIG THANK YOUを言いたい。私の取引システムを構築するために、貴社のウェブサイトから2つのファイル(ByMarketBuy(Sell)+e-SARTrailing)をダウンロードさせていただきました。EUR/USDペ アのByMarketBuy(Sell )スクリプトを 1画面に 表示し、1つの注文にMAGIC30、もう1つの注文にMAGIC60(それぞれM30とH1)を規定し、2画面と 3 画面にe-SARTrailing アドバイザーをそれぞれSAR.TF=30と60を設定して 送信しています。そして、2つの注文が同じ通貨ペアで開いているので、彼らは共回転して行くとMagicNumber なしアドバイザーのe-SARTrailing 2画面上で互いに競合することが判明した。 私はあなたに大きな要求がある場合は、アドバイザー(書き込みに)MagicNumberとして このような機能を修正することが できますそのようなサプリメントは多くを感謝することができるだろうそして、これは 方向性に関係なく、 すべてのタイムフレームで 互いに衝突することなく同時に機能 します。

ありがとう ございまし

 
tim-time:

MagicNumber 機能でExpert Advisorを調整して いただけないでしょうか?

ご指摘ありがとうございます。マジコン用のフィルターを追加してみました...。
 

GetTimeOpenBar()関数。

この関数は、任意のシンボルと任意の時間枠のバーのオープンタイムを返します。一般的には、基本的な関数であるiBarShift()iTime() を組み合わせただけのものです。したがって、ここに新しいものはなく、特定の変種を使用することは便宜上の問題である。この関数には、以下のオプションのパラメータを渡すことができます。

  • sy- 取引商品名(シンボル)。値"" およびNULLは、現在のシンボルを意味する。初期値は"" である。
  • tf- 時間枠.デフォルト値 -0- 現在のタイムフレーム。
  • dt- 日付と時刻。デフォルト値 -0- 現在の時刻。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.01.2012                                                     |
//|  Описание : Возвращает время открытия бара.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий)                 |
//|    dt - дата/время                 (    0       - текущее)                 |
//+----------------------------------------------------------------------------+
datetime GetTimeOpenBar(string sy="", int tf=0, int dt=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  if (tf==0) tf=Period();
  if (dt==0) dt=TimeCurrent();
  
  int sh=iBarShift(sy, tf, dt, False);

  return(iTime(sy, tf, sh));
}

 
KimIV:
ご指摘ありがとうございます。マジシャン用のフィルターを追加しました...

HELLO!

すげー!!!そのペースだ!!!(笑 (自分でやるか、NOと言うか!)。

プロフェッショナルに対する大きな尊敬!(プロフェッショナルは、細かいことまで知っていること、その分野での努力、そしてもちろん長年の 経験の積み重ねが必要です。)

私はすでに4 5年と1 5年仕上げの外国為替取引(ハードワーク+貿易の成功と失敗の瞬間の経験、それは最小の詳細を学ぶために残っている)内蔵の家具に従事している。

私の目標は、トレーディングのプロになることです。

よろしくお願いします

敬意を込めて

 

エラーのコードによる短い、または詳細なロシア語の 説明を返すErrorRU() 関数をまとめました。トレードサーバーから返されるエラーとMQLプログラム実行時のエラーの両方を検出します。しかし、すべてのエラーに「どうしたらいいか」という推奨事項が詳しく書かれているわけではありませんが、そういうものなのです。

テスト用にスクリプト内の関数を公開しています。

もし、MQHファイルの形でバリエーションが必要な人がいれば、私のウェブサイトから 入手することができます。

ファイル:
 

こんにちは。

e-SignalOfTradeの EAにPUSH-notificationを追加することは可能ですか?

https://www.mql5.com/ru/forum/6960

https://www.mql5.com/ru/docs/common/sendnotification

(レンタルVPS サーバーは、UseSendMail=Trueで アドバイザーの作業のためにMT4のメール設定で指定されるべきデータSMTP-serverを与えることを拒否しています- 電子メール。)

ありがとう ございまし