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

 
if(TralProcent!=0)
{ NewProfProc=Profit(-1)/(AccountBalance()/100); if(NewProfProc>0 && (ProfitProcent==0 || ProfitProcent<NewProfProc)) {ProfitProcent=NormalizeDouble(NewProfProc, 2; } if(ProfitProcent>0 &&) {ProfitProcent=NormalizeDouble(NewProfProc); } if(ProfitProcent=0 &&) {NewProfProc<NewProfProc); if (ProfitProcent=0 &&)ProfitProcent>(TralProcent+TralStartProcent)) {TrallingProcent=ProfitProcent-TralProcent;} //+------------------------------------------------------------------+ if(NewProfProc>0 && TrallingProcent!=0 && NewProfProc<=TrallingProcent) {CloserS(); CloserB(); ProfitProcent=0; TrallingProcent=0;} }。

------ロボットが%balanceでtrawlを使用しています、ここにステップの変更を追加する方法を教えてください。私の理解が正しければ、それはTralingprocentに必要です。例えば、step =2%であれば、trailingprocentは少なくとも2%増加する。
 
khorosh:

アルチョム・トリシキン

オブジェクト - 任意のターミナルウィンドウとそのサブウィンドウに出力することができます。

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

こんな感じでやってみたんですが、うまくいきません。

ウィンドウのナンバリングがおかしいのかもしれません。チャートの中に別ウィンドウが1つある場合、その番号==1?

wndNum 表示するウィンドウの番号

int wndNum=1;

int OnInit()
 {
 string short_name=MQLInfoString(MQL_PROGRAM_NAME);
 short_name+=": MyIndicator";
 IndicatorSetString(INDICATOR_SHORTNAME,short_name);
 wndNum=ChartWindowFind(0,short_name);
 //---
   return(INIT_SUCCEEDED);
 }

// Функция создания объекта
void SetLabel(string nm,string text,long xd,long yd,int fs,string font,int cr,int an,color cl,string tooltip,bool sel) {
 if(ObjectFind(0,nm)<0) {
    ObjectCreate(0,nm,OBJ_LABEL,wndNum,0,0);
    ObjectSetInteger(0,nm,OBJPROP_CORNER,cr);
    ObjectSetInteger(0,nm,OBJPROP_ANCHOR,an);
    ObjectSetString (0,nm,OBJPROP_FONT,font);
    ObjectSetInteger(0,nm,OBJPROP_FONTSIZE,fs);
    ObjectSetInteger(0,nm,OBJPROP_BACK,false);
    ObjectSetInteger(0,nm,OBJPROP_HIDDEN,false);
    ObjectSetInteger(0,nm,OBJPROP_SELECTABLE,sel);
    ObjectSetInteger(0,nm,OBJPROP_SELECTED,sel);
    ObjectSetString (0,nm,OBJPROP_TOOLTIP,tooltip);
  }
    ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,yd);
    ObjectSetInteger(0,nm,OBJPROP_XDISTANCE,xd);
    ObjectSetString (0,nm,OBJPROP_TEXT,text);
    ObjectSetInteger(0,nm,OBJPROP_COLOR,cl); 
 }
追伸:khoroshさん、プライベートで返信できないんですよー、チャットが機能しないんですよー。
 
Vitaly Muzichenko:

wndNum 表示するウィンドウの番号

追伸:khorosh さん、プライベートでお返事できません。チャットが機能していません。

Vitaliyさん、ありがとうございます!あと、別ウィンドウにあるインジケーターのカーブの先端につけるにはどうしたらいいのでしょうか?ゼロバー上のTime[0]とカーブバッファの値を座標として設定してみましたが、うまくいきません。

 
khorosh:

Vitalyさん、ありがとうございます!あと、別ウィンドウにあるインジケーターのカーブの先端に結びつけるにはどうしたらいいのでしょうか?Time[0]とゼロバー上のカーブバッファの値を座標として設定してみましたが、うまくいきません。

その問いに、彼はそう答えた。よく出てくるニュアンスは、wndNumの値そのものだけです。wndNumの値は定数ではありません。常に監視していなければならない。ユーザーは、現在のウィンドウの前にあるインジケータサブウィンドウを削除することができます。また、OnInit()でインジケータ自体を探さないようにしてください。このコードはOnCalculate() に移動する必要があります。いずれにせよ、サブウィンドウのインデックスが正しいかどうか、常に確認する必要があります。

 
Ihor Herasko:

という質問に、そう答えた。よく出てくるニュアンスは、wndNumの値そのものだけです。wndNumの値は定数ではありません。常に監視していなければならない。ユーザーは、現在のウィンドウの前にあるインジケータサブウィンドウを削除することができます。また、OnInit()でインジケータ自体を探さないようにしてください。このコードはOnCalculate()に移動する必要があります。いずれにせよ、サブウィンドウのインデックスが正しいかどうか、常に確認する必要があります。

彼の例では、最初にオブジェクトの座標がピクセル単位であると仮定しています(静的オブジェクト)。しかし、インジケータカーブにバインドする必要があります。そこでまず、この座標を計算する必要がある。作品には出てきません。この方法で試してみましたが、うまくいきません(LevLabelSpread変数に、最初のバーのカーブバッファの値があります)。

....
int X=0,Y=0;
   wndNum=ChartWindowFind(0,Shortname);  
   ChartTimePriceToXY( 0,wndNum,Time[1],LevLabelSpread,X,Y); Print("X=",X," Y=",Y);    
   if(ObjectFind("_Spread")<0) 
     {
      ObjectCreate(0,"_Spread", OBJ_TEXT, wndNum, 0,0);
      ObjectSetText("_Spread", "                Spread", 10, "Arial", clrYellow);
     }
   else
     {
      ObjectSetInteger(0,"_Spread",OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(0,"_Spread",OBJPROP_XDISTANCE,X);
      ObjectSetString (0,"_Spread",OBJPROP_TEXT,"                Spread");
     } 

.... 
 
khorosh:

彼は、オブジェクトの座標が最初はピクセル単位であると仮定する例を持っています(静的オブジェクト)。しかし、指標となる曲線と連動させる必要がある。だから、この座標をあらかじめ計算しておく必要があるんです。作品には出てきません。この方法で試してみましたが、うまくいきません(変数LevLabelSpreadは最初のバーのカーブバッファの値を持っています)。

なぜ、TEXTタイプのオブジェクトの価格をピクセル単位で計算しなければならないのですか?バータイムとプライスで位置決めされています。こんな感じで持っています。

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[])
{
   int nWndIndex = ChartWindowFind();
   if (nWndIndex < 0)
      return 0;
      
   string sName = "MyText";
   if (ObjectFind(0, sName) < 0)
      ObjectCreate(0, sName, OBJ_TEXT, nWndIndex, time[rates_total - 1], <здесь значение индикатора>);
      
   ObjectSetInteger(0, sName, OBJPROP_ANCHOR, ANCHOR_LEFT);
   ObjectSetString(0, sName, OBJPROP_TEXT, "Sample text");

   return(rates_total);
}

結果


 
Ihor Herasko:

なぜ、TEXTオブジェクトの価格をピクセル単位で計算するのか?バータイムとプライスで位置決めされています。こんな感じで持っています。

結果


ありがとうございました。

 
Ihor Herasko:


うまくいきましたね。


 
チャートハンドルとチャートアイデンティファイアの 2つの概念の意味と目的を教えてください。その違いは何か、どのような時にどのように使われるのか。
 
khorosh:
チャートハンドルとチャートアイデンティファイアという 2つの概念の意味と目的を教えてください。その違いは何か、どのような時にどのように使われるのか。

どうやって両方を手に入れるのか、見せてください。今のところ、同じことを言っているようです。