MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 740

 
Taras Slobodyanik:

OnInitで変数の初期化(オブジェクトの再描画を含む)を行う。


これはどういうことなのか、説明してください。

ラベル作成後、OnInitに追加しました。

    ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y);
    ChartRedraw();


しかし、結果は同じです。

 
psyman:


これはどういうことなのか、説明してください。

タグ作成後、OnInitに追加しました。


が、結果は同じです。

コードを見る必要があります、何があるのか...

ps. 上記のコードは問題なく動作します(不具合は見当たりません)。
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


Bid変数をBid0に置き換えたのですが。

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2019.01.17
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
こんにちは、価格がムービングに タッチしたときに開く注文はどのように書けばいいのでしょうか?
 
Ivan Rozhkov:
こんにちは、価格がムービングにタッチしたときに開く注文はどのように書けばいいのでしょうか?
if ((prev_bid>ma && curr_bid<=ma) || (prev_bid<ma && curr_bid>=ma))
   //открывается ордер
 
Taras Slobodyanik:

コードを見てみないとわからない...。

ps. 上記のコードは正常に動作します(不具合はありません)。
(https://www.mql5.com/ru/forum/160683/page739#comment_10290585)


Bid変数をBid0に置き換えてみたものの、あらら。

付け加えると、これは私が5でテストしているところです。MT4では、チャートを 開くと垂直マーカーはすぐに所定の位置に移動し、ティックを待ったりマウスを動かしたりする必要はありません。水平シフトの不具合は数回ありましたが、インジケーターの再コンパイルで何とか克服できました。

 
psyman:


試してみると、マウスを動かさないとマークが戻りません。同じ松葉杖でも、手に持っているものが違うんです :-)

また、CHARTEVENT_CHART_CHANGE のためのチャートの切り替えは、イベントではない

この異常事態を克服する方法をどなたか考えてください。


チャートウィンドウを切り替えると、Printがメッセージを表示します。(MT4を使っていますが、チャートの切り替えをCHARTEVENT_CHART_CHANGE イベントとして捕らえることはMT4のドキュメントには書かれていません。)

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
  if(id==CHARTEVENT_CHART_CHANGE) Print("graph");
}

でも、そうですね、やはり松葉づえ方式ですね。他のチャートに切り替えたときにY座標が異なる原因を探る必要があります。しかし、コードを見ると、何らかの理由でChartTimePriceToXYが 異なる結果を出していると結論付けられるのです。

 
psyman:

付け加えるのを忘れていましたが、5でテストしています。MT4では、チャートを 開くと垂直マーカーが本当に素早く所定の位置に移動し、ティックを待ったりマウスを動かしたりする必要はありません。水平シフトの不具合は数回ありましたが、インジケーターの再コンパイルで何とか克服できました。

チャート上のキューから、分単位のバーの作成、現在のinitの後に前回のdeinitをトリガーするなど、5には多くの「機能」があります)

ですから、バー/グラフ/オブジェクトをチェックする必要があります - どの時点でエラーが発生し、それを修正するか。

 
Taras Slobodyanik:


一般的には、バー/グラフィックス/オブジェクトをチェックし、どの時点でエラーが発生したかを確認し、それを修正する必要があります。


どうすればいいのか、何から始めればいいのか。

 
psyman:


どうすればいいのか、何から始めればいいのか。

つまり、oninitで入札を印刷し(現在の日付を印刷することもできます)、さらに計算でも印刷するのです。
すぐにストーリーが盛り上がらず、後からバーが登場するということでしょうか

 
Taras Slobodyanik:

例えば、イニシャルで入札を印刷し(現在の日付を印刷することもできます)、計算するときにも印刷します。
この物語は、すぐに構築する時間がなく、バーが後で現れることをテレパシーします。

次のコードは、写真で見るストーリーです。

//+------------------------------------------------------------------+
//|                                              !_clr_indicator.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window


string objname="Bid";
input color Bid_color = clrCrimson;

int OnInit()
  {

int x,y;
double Bid0 = SymbolInfoDouble(Symbol(), SYMBOL_BID);
int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);  //ширина графика



        Print("1 Bid0 = ", Bid0,  " x = ", x, " y = ", y," TimeCurrent()=", TimeCurrent() );

   ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
   
   ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid0, _Digits-1));
        ObjectSetInteger(0, objname, OBJPROP_FONTSIZE, 12);
        ObjectSetInteger(0, objname, OBJPROP_COLOR, Bid_color);
        ObjectSetString(0, objname, OBJPROP_FONT, "Verdana");

        ChartTimePriceToXY(0, 0, TimeCurrent(), Bid0, x, y);
        Print("2 Bid0 = ", Bid0,  " x = ", x, " y = ", y," TimeCurrent()=", TimeCurrent() );
         
        ObjectSetInteger(0, objname, OBJPROP_XDISTANCE, width-60);

   ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y);

   

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

return(rates_total);

  }

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam) 
  { 

int x2,y2;
double Bid2 = SymbolInfoDouble(Symbol(), SYMBOL_BID);
double  cprice;
datetime ctime;
int      cwindow=0;



if(id==CHARTEVENT_CHART_CHANGE) 
   {
   



           ChartTimePriceToXY(0, 0, TimeCurrent(), Bid2, x2, y2); 
      
      Print("5 Bid2 = ", Bid2,  " x2 = ", x2, " y2 = ", y2," TimeCurrent2()=", TimeCurrent() );
      
        ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, y2);
   
   ChartXYToTimePrice(0,x2,x2,cwindow, ctime, cprice);
   

   }



  }



void OnDeinit(const int reason) 
   { 

      ObjectDelete(0,objname);
   } 
 
 


ネットワークを切断し、インジケータを追加

次のグラフに切り替わります


y2の値が変化したため、戻る


y2が値を戻したのに、マーカーが「消えた」値でカウントされている!マウスのホイールを回転させる。

マーカーが元の位置に戻りました