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

 
Vitaly Muzichenko:

オブジェクトの作成時に、ユーザーが選択を解除しても選択状態が失われず、選択されないようにする方法を教えてください。4では簡単でしたが、5ではうまくいきません。

昔はそうで、うまくいっていたんですけどね。

void SetHLine(...,double p,bool sel) {
  if(ObjectFind(chart_ID,nm)!=0) {
    ObjectCreate(chart_ID,nm,OBJ_HLINE,0,0,0);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
    ...
  }
   ObjectSetDouble(chart_ID,nm,OBJPROP_PRICE,p);
}

このように、作成時には作成中のオブジェクトを一度に選択するかしないかを選択すれば、もう変更されず、参照もされませんが、5枚目ではそれが機能せず、選択せずに作成されます。

mql5でオブジェクトを作成時に選択し、必要な時に手動で管理できるようにするには - 選択する/選択しない

objprop_selectable
 

まあ、そうなんですが、アイコンが目立ちませんね

void SetArrow(string nm,string tooltxt="",datetime t=0,double p=0,color col=clrRed,long type=0) {
if(ObjectFind(0,nm)!=0) {
    ObjectCreate(0,nm,type==0?OBJ_ARROW_BUY:OBJ_ARROW_SELL,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,true);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetString(0,nm,OBJPROP_TOOLTIP,tooltxt);
   }
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t);
}
 
Vitaly Muzichenko:

そうなのですが、アイコンがハイライトされていません。

void SetArrow(string nm,string tooltxt="",datetime t=0,double p=0,color col=clrRed,long type=0) {
if(ObjectFind(0,nm)!=0) {
    ObjectCreate(0,nm,type==0?OBJ_ARROW_BUY:OBJ_ARROW_SELL,0,0,0);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,col);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,true);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetString(0,nm,OBJPROP_TOOLTIP,tooltxt);
   }
    ObjectSetDouble(0,nm,OBJPROP_PRICE,p);
    ObjectSetInteger(0,nm,OBJPROP_TIME,t);
}

すべてがハイライト表示されます。

ハイライト表示

ファイル:
OBJ_ARROW.mq5  22 kb
 
Vladimir Karputov:

すべてが際立っている。

くそ、ある機能を罫線で囲み、別の機能をチェックしたら、全部動いた。ありがとうございました。もう寝ます)
 

このように設定すると、作成時に線がハイライトされないという不思議な機能に気づきました。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

しかし、その逆をやれば、選別に問題はない。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

なぜかsumandを入れ替えるとsumが変わる?

 
Vitaly Muzichenko:

このように設定すると、作成時に線がハイライトされないという不思議な機能に気づきました。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

しかし、その逆をやれば、選別に問題はない。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

なぜか和を入れ替えると和が変わる?

どうやら、その時

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

最後のコマンドを実行すると、チャートが更新されます

 
Vitaly Muzichenko:

不思議な機能に気づいたのですが、このように設定すると、作成時に行を選択せず

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);

でも、逆なら何の問題もないんです。

ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);

なぜか和を入れ替えると和が変わる?

オブジェクトを作成した 当初は、おそらくそのデフォルトプロパティを選択不可に設定したことでしょう。

そして、それを選択すると(しかし、オブジェクトは選択できない)、結果的に何も選択されなくなる

そして、それを選択可能に設定するのです。しかし、「ボルジョミを飲むのが遅すぎる」・・・。
 

では、そのコードの全貌をご紹介しましょう。

void SetVLine(long chart_ID=0,string nm="nm",datetime tm=0,int wd=1,int st=0,color cl=clrRed,
                                             string tooltxt="",bool sel=false,bool back=false) {
if(ObjectFind(chart_ID,nm)<0) {
    ObjectCreate(chart_ID,nm,OBJ_VLINE,0,tm,0);
    ObjectSetInteger(chart_ID,nm,OBJPROP_TIME,tm);
    ObjectSetInteger(chart_ID,nm,OBJPROP_BACK,back);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
    ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,sel);
  // ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,true);
    ObjectSetString(chart_ID,nm,OBJPROP_TOOLTIP,tooltxt);
    ObjectSetInteger(chart_ID,nm,OBJPROP_COLOR,cl);
    ObjectSetInteger(chart_ID,nm,OBJPROP_WIDTH,wd);
    ObjectSetInteger(chart_ID,nm,OBJPROP_STYLE,st);
   }
}

はい、すべてのオブジェクトタイプで再確認しました。"SELECTABLE"を最初に、そして"SELECTED"を最初に置く必要があります。

ご参加と解決へのご協力ありがとうございました。

 
MetaTrader5では、3つのブロックに分けてEAを生成することが可能です。1ブロックは、1つの指標または複数の指標から信号を出します。2ブロックトレーリングバー3ブロックのリスク

1.カスタムインジケーターを 1ブロックに追加することはできますか?その場合、どのようにすればよいのでしょうか?

2.トレードが両方向で開始されるようにコードを修正することは可能ですか(現在、例えば、買いトレードが開始されると、買いトレードが終了するまで売りトレードは開始されません)。
 
このトピックに関連しないコメントは、「MQL4 MT4 MetaTrader 4初心者からの質問」に移動しました。
理由: