初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1269

 
Kira27:

MT5では一色で描画され、MT4では遅延なく正常に描画されるのですが、MT5では一色で描画され、MT4では遅延なく正常に描画されるのですが、MT5では一色で描画され、MT4では遅延なく正常に描画されるのですが、MT5では遅延が発生します。

すべてを試したわけではないのでしょう。

Alexey Viktorov:

オブジェクトの名前を変更した後も、そのオブジェクトを参照できない可能性が非常に高いのです。リネームの後にChartRedrawを入れてみるとよいでしょう。それでもダメなら、他の方法でシーケンスを構築するしかない。

ps; 他の方法として、まずsparamという名前で再塗装し、その後名前を変更する。

なぜか、イベントCHARTEVENT_OBJECT_CREATE は、ラットがチャートに触れた直後にカウントされ、オブジェクトの作成が完了した後にはカウントされない。そして、異なるヒューズの端の価格が同じであることが判明する。そのため、オブジェクトを作成した後に再描画する必要があります。

もうひとつ、レベルや芯の主線は塗るのでしょうか?

ここでは、3つのバリエーションを紹介します。

ひとつ。

bool endCreate;
string newName;
/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  if(endCreate)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
    endCreate = false;
   }
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    endCreate = true;
   }
 }/******************************************************************/

2番目。

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {

 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  string newName;  
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
   }
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   }
 }/******************************************************************/

3つです。

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    string newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   ChartRedraw(); 
  }
 }/******************************************************************/


 
SanAlex:

ある指標でポイントを取り、それを別のバッファに転送するアルゴリズムをどのように構成するか。

- トレンドラインを描くために(写真のように)

-----------------------------------------

直感でいろいろ試してみたが、描かれてはいるが、変なところに描かれている。

-----------------------------------------------------------------------------------------------------

インジケータを添付し、動作していますが、これらの行を調整することができません。

どなたか、トレンドラインの結合点に関する記事を教えてください。

-- 描けないんです、どのあたりかはっきりしないんです。

EURUSDH4

---------------------------------------------------------

みたいなもんかな?

//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
//--- количество видимых баров в окне графика
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- размер массива price
   int accuracy=1000;
//--- массивы для хранения значений дат и цен, которые будут использованы
//--- для установки и изменения координат точек привязки линии
   datetime date[];
   double   price[];
//--- выделение памяти
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- заполним массив дат
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError());
      return;
     }
//--- заполним массив цен
//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
//--- создадим линию тренда
   if(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
      InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
     {
      return;
     }



-------------------

私は正しい道を歩んでいるのだろうか?

ファイル:
2.mq5  82 kb
 
SanAlex:

どなたか、トレンドラインポイントに関する記事を紹介してください。

-- 今は描くだけで、どこがどうなっているのかわからない。

---------------------------------------------------------

みたいなもんかな?

-------------------

私は正しい道を歩んでいるのだろうか?

トレンドラインは 2点で描かれる。それは価格データか、別の指標のデータである。ところで、フラクタルによる描画の例、これはお馴染みであろう)

https://www.mql5.com/ru/code/29210

Line through two fractals
Line through two fractals
  • www.mql5.com
cm BASKET Советник управляющий счетом. Показывает какие пары инструментов сейчас торгуются на данном счете. Показывает прибыль полученную по каждой паре за определенное время. Помогает переключаться между множества открытых окон... Virtual Trailing Stop 2
 
VVT:

トレンドラインは 2点で描かれ、これは価格データか他の指標のデータで、フラクタルによる描画の例で、ちなみに皆さんにはお馴染みです)

https://www.mql5.com/ru/code/29210

1つのインジケーターでやりたかったのですが、うまくいかなかったです。

- 2つのインジケーターで行う必要がありました。

それが、私の仕事です。

gbpusdm30 ゴトブ

---------------------------

お礼を言うのを忘れてました!- ありがとうございます!!!

 
SanAlex:

あるIndicatorでやりたかったのですが、うまくいかなかったのですが、ご提案いただいたこちらでやってみました。

- ということで、2つのIndicatorで行うことになりました。

そういうことだったんですね。

---------------------------

お礼を言うのを忘れてました!- ありがとうございます!!!

うまく組み合わせれば、1つのインジケータで様々なオブジェクトを作成することができます)

 
Alexey Viktorov:

どうやら、すべてを試したわけではなさそうです。

何らかの理由で、CHARTEVENT_OBJECT_CREATE イベントは、ラットがチャートに触れた直後にカウントされ、オブジェクトが作成された後ではありません。そして、異なるヒューズの端の価格が同じであることが判明する。そのため、オブジェクトを作成した後に再描画する必要があります。


論理的にどう判断したのですか?

そしてもうひとつ、レベルを描くのか、それともFIBの主線を描くのか、ということです。


トレンドラインを様々なバリエーションで塗り替えてみた))))

ここでは、3つのバリエーションを紹介します。

ひとつ。

2番目。

第3回


ありがとうございました!!皆さんの例を参考に、論理的な思考ができるようになるかもしれません)))。

コーディングというか、トレーディングに従事しているのですか? というか、トレーディングは何年やっているのですか? 私は12年やっていますよ)))

 
Kira27:

選択肢を与えていただき、本当にありがとうございます!!皆さんの例を参考に、論理的思考を身につけたいと思います))))

というか、いつからトレードしてるんですか? 私はもう12年やってますけど(笑)。

私はいつもそんなに「優しい」わけではありません。私はいつもそんなに「優しい」わけではなく、攻撃の時だけなのですが...だから、私の例から学ぶことはあまりないのです。私はほぼ同じ期間、トレーディングに携わっています。

 
Alexey Viktorov:

私はいつもそんなに「優しい」わけではありません。攻撃時のみ...なので、私の例から学ぶことはあまりありません。私もトレーディングでは同じぐらいです。

どうだろう、プログラミングの手法やテクニックは、例によってよりよく学ぶことができるんだ。MQL5にもMQL4の ようなチュートリアルがあり、同梱のファイルを使って順を追ってロボットを解説 してくれればいいのにと思います。

 
Alexey Viktorov:

私は、ほぼ同じぐらいの期間、トレーディングに携わっています。

 
VVT:

まあ、それらを組み合わせれば、1つのインジケータでいろいろなオブジェクトを作ることができます)

その方法でやりたかったんです。 1週間前からやろうとしていたんですが、どうしてもうまくいかなかったんです。

- 2番目の指標では、過去のポイントやラインそのものを見ることはできず、マーケットエントリーが 定義されるポイントとレベルのみが存在します。

----------------

この2つの指標は1つです(これは私の草稿で、4つの指標の名前は変えていません)

理由: