初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1344 1...133713381339134013411342134313441345134613471348134913501351...1503 新しいコメント Vitaly Muzichenko 2021.09.12 17:02 #13431 Igor Makanu #:やだプログラムで呼び出す場合は、パラメータをランダムに生成することができますで、手動で実行する必要がある場合は、やはり入力パラメーターである定義済みマクロに何があるか見てみると、__COUNT__だったのが、ランダムで何かがある、__COUNT__が どう動くか確認していない- それは静的で、ほとんど効果がないことが判明、多分あなたはあなたのタスクのためにランダムを使用することができます。 RANDOM__は 見つかったのですが、値を変更するためのコードをコンパイルする必要があります。それとも、何か見落としているのでしょうか? #define MACRO __RANDOM__ input ulong MASlow = MACRO; // Период медленной МА 何らかの方法で実行時に変更することは可能でしょうか? __RANDOM__ Компилятор для каждого объявления __RANDOM__ подставляет в код случайное ulong-число. Fast235 2021.09.12 17:13 #13432 は、通話のたびに新しい番号になるのでは? Vitaly Muzichenko 2021.09.12 17:15 #13433 Fast235 #: は毎回新しい番号になるのでは? いいえ Vladislav Andruschenko 2021.09.12 17:15 #13434 Fast235 #: は、通話のたびに新しい番号になるのでは? コンパイラなので、コンパイル時に Igor Makanu 2021.09.12 17:22 #13435 Vitaly Muzichenko #:いいえ それじゃ、解けないよ。 何が問題なのか?- 違う形にしてみるのです。 Alexey Viktorov 2021.09.12 17:47 #13436 Vitaly Muzichenko #:いいえ ヴィタリ、これは何のためだ?ウィンドウ番号を取得して何かを入れるには、インジケータウィンドウが > 1個必要ですか? Vitaly Muzichenko 2021.09.12 17:52 #13437 Alexey Viktorov #: ヴィタリイ、何のために?ウィンドウ番号を取得して何かを入れるには、インジケータウィンドウが > 1個必要ですか? はい、その通りです。 インジケータが配置されているウィンドウの番号を取得する必要があります。そのためには、ボタンをクリックして、データを取得します if(id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,(string)wndNum+"_butt")!=-1) { Alert("Window number:"+(string)wndNum," => Program name:"+prog_name," => Short name:"+short_name); ObjectSetInteger(0,sparam,OBJPROP_STATE,false); } エムティーフォーワークス mt5は最初にインストールした1台のみで動作し、コピーは無視されます。 Vitaly Muzichenko 2021.09.12 18:10 #13438 こうなってくると、今週の問題は解けませんね :( //+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2020, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID //#property indicator_width1 1 input ulong MASlow = __COUNTER__; // Период медленной МА //+------------------------------------------------------------------+ int wndNum; string prog_name,short_name; double Label1Buffer[]; bool flag=false; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { prog_name=MQLInfoString(MQL_PROGRAM_NAME); int q=0; for(int k=1; k<ChartGetInteger(0,CHART_WINDOWS_TOTAL); k++) { for(int e=0; e<ChartGetInteger(0,CHART_WINDOWS_TOTAL); e++) { if(ChartIndicatorName(0,k,e)==prog_name) { q++; } } } short_name="Set ("+(string)MASlow+")"; IndicatorSetString(INDICATOR_SHORTNAME,short_name); wndNum=ChartWindowFind(); wndNum=q; ButtonCreate(0,(string)wndNum+"_butt",44,18,40,14,CORNER_RIGHT_LOWER,"= "+(string)wndNum+" =","Alert","Arial",9,clrBlack,C'236,233,216',clrGray,false,false,false); SetIndexBuffer(0,Label1Buffer); PlotIndexSetInteger(0,PLOT_LINE_WIDTH,q+1); flag=true; Print("INIT SUCCEEDED: "+(string)wndNum," => Count: ",q); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectsDeleteAll(0,(string)wndNum+"_butt"); ChartRedraw(); } //+------------------------------------------------------------------+ 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[]) { for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++) { Label1Buffer[i] = close[i]; } if(flag==false) OnInit(); return(rates_total); } //+------------------------------------------------------------------+ //| OnChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,(string)wndNum+"_butt")!=-1) { Alert("Window number:"+(string)wndNum," => Program name:"+prog_name," => Short name:"+short_name); ObjectSetInteger(0,sparam,OBJPROP_STATE,false); } if(id==CHARTEVENT_CHART_CHANGE) { ButtonCreate(0,(string)wndNum+"_butt",44,18,40,14,CORNER_RIGHT_LOWER,"= "+(string)wndNum+" =","Alert","Arial",9,clrBlack,C'236,233,216',clrGray,false,false,false); OnInit(); } } //=============================================================================================== //--------------------------------------- Создает кнопку ---------------------------------------+ //=============================================================================================== void ButtonCreate(long chart_ID=0,string nm="Button",int xd=0,int yd=0,int width=50,int height=18,int cr=0, string text="Button",string tooltip="Button",string font="Arial",int font_size=9,color clr=clrBlack, color back_clr=C'236,233,216',color border_clr=clrNONE,bool state=false,bool selection=true,bool selectable=true,bool bc=false) { if(ObjectFind(chart_ID,nm)<0) { ObjectCreate(chart_ID,nm,OBJ_BUTTON,wndNum,0,0); ObjectSetInteger(chart_ID,nm,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,nm,OBJPROP_YSIZE,height); ObjectSetInteger(chart_ID,nm,OBJPROP_CORNER,cr); ObjectSetString(chart_ID,nm,OBJPROP_TEXT,text); ObjectSetString(chart_ID,nm,OBJPROP_TOOLTIP,tooltip); ObjectSetString(chart_ID,nm,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,nm,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(chart_ID,nm,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,nm,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,nm,OBJPROP_BORDER_COLOR,border_clr); ObjectSetInteger(chart_ID,nm,OBJPROP_BACK,bc); ObjectSetInteger(chart_ID,nm,OBJPROP_STATE,state); ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTABLE,selectable); ObjectSetInteger(chart_ID,nm,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,nm,OBJPROP_HIDDEN,false); ObjectSetInteger(chart_ID,nm,OBJPROP_YDISTANCE,yd); ObjectSetInteger(chart_ID,nm,OBJPROP_ZORDER,10); ObjectSetInteger(chart_ID,nm,OBJPROP_XDISTANCE,xd); ChartRedraw(); } } //+------------------------------------------------------------------+ Alexey Viktorov 2021.09.12 18:11 #13439 Vitaly Muzichenko #:はい、その通りです。インジケータが配置されているウィンドウの番号を取得する必要があります。そのためには、ボタンをクリックして、データを取得しますエムティーフォーワークスmt5は最初にインストールした1つでしか動作しないので、コピーは無視されます。 まあ、これは生産性が向上した結果らしいのですが...なぜ、あまり賢くないユーザーの気まぐれで100500回もインジケータを再計算するのでしょうか?しかし、偶然にも保護に悩む機能があるのです。 おそらく、インジケータのショートネームに外部パラメータを入力する必要があります。 input int MAFast = 8; // Период быстрой МА input string shortName = "1"; // Префикс… string short_name = ""; /********************************************************************\ | Custom indicator initialization function | \********************************************************************/ int OnInit() { //--- indicator buffers mapping short_name = shortName+MQLInfoString(MQL_PROGRAM_NAME) + "=Set (" + (string)MASlow + "/" + (string)MAFast + ")"; IndicatorSetString(INDICATOR_SHORTNAME, short_name); SetIndexBuffer(0, Label1Buffer, INDICATOR_DATA); Print("INIT_SUCCEEDED"); return(INIT_SUCCEEDED); }/******************************************************************/ その仕組みはこうだ。テスト済みです。 Vitaly Muzichenko 2021.09.12 18:15 #13440 Alexey Viktorov #:まあ、これはパフォーマンス向上のための結果らしいのですが...あまり賢くないユーザーの気まぐれで100500回もインジケーターを再計算するのはいかがなものでしょうか?しかし、偶然にも保護に悩む機能があるのです。おそらく、インジケータのショートネームに外部パラメータを入力する必要があります。その仕組みはこうだ。テスト済みです。 再度、次のコピーを読み込む際に、プレフィックスを変更する必要がありますか? 1...133713381339134013411342134313441345134613471348134913501351...1503 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
やだ
プログラムで呼び出す場合は、パラメータをランダムに生成することができます
で、手動で実行する必要がある場合は、やはり入力パラメーターである
定義済みマクロに何があるか見てみると、__COUNT__だったのが、ランダムで何かがある、__COUNT__が どう動くか確認していない- それは静的で、ほとんど効果がないことが判明、多分あなたはあなたのタスクのためにランダムを使用することができます。
RANDOM__は 見つかったのですが、値を変更するためのコードをコンパイルする必要があります。それとも、何か見落としているのでしょうか?
何らかの方法で実行時に変更することは可能でしょうか?
__RANDOM__ Компилятор для каждого объявления __RANDOM__ подставляет в код случайное ulong-число.
は毎回新しい番号になるのでは?
いいえ
は、通話のたびに新しい番号になるのでは?
いいえ
それじゃ、解けないよ。
何が問題なのか?- 違う形にしてみるのです。
いいえ
ヴィタリイ、何のために?ウィンドウ番号を取得して何かを入れるには、インジケータウィンドウが > 1個必要ですか?
はい、その通りです。
インジケータが配置されているウィンドウの番号を取得する必要があります。そのためには、ボタンをクリックして、データを取得します
エムティーフォーワークス
mt5は最初にインストールした1台のみで動作し、コピーは無視されます。
こうなってくると、今週の問題は解けませんね :(
はい、その通りです。
インジケータが配置されているウィンドウの番号を取得する必要があります。そのためには、ボタンをクリックして、データを取得します
エムティーフォーワークス
mt5は最初にインストールした1つでしか動作しないので、コピーは無視されます。
まあ、これは生産性が向上した結果らしいのですが...なぜ、あまり賢くないユーザーの気まぐれで100500回もインジケータを再計算するのでしょうか?しかし、偶然にも保護に悩む機能があるのです。
おそらく、インジケータのショートネームに外部パラメータを入力する必要があります。
その仕組みはこうだ。テスト済みです。
まあ、これはパフォーマンス向上のための結果らしいのですが...あまり賢くないユーザーの気まぐれで100500回もインジケーターを再計算するのはいかがなものでしょうか?しかし、偶然にも保護に悩む機能があるのです。
おそらく、インジケータのショートネームに外部パラメータを入力する必要があります。
その仕組みはこうだ。テスト済みです。
再度、次のコピーを読み込む際に、プレフィックスを変更する必要がありますか?