エキスパートアドバイザー - 雑多な質問 - ページ 12 1...5678910111213141516171819...43 新しいコメント honest_knave 2016.12.18 19:36 #111 Marco vd Heijden:そうですね。微妙に違うトホホ。 グローバルかスタティックかというのは、どちらでもないですね。しかし、あなたのリセットの方法は良いですね。オーバーランを防げます。 honest_knave 2016.12.18 19:38 #112 honest_knave: グローバルかスタティックかは、ここでもそこでもありません。しかし、あなたのリセット方法は優れています。オーバーランを防ぐことができます。早とちりでした。あなたのは逆方向のオーバーランです。後でCTRLを押すと発動します。チャートをクリックしてからCTRLを押せば発動します。 Max Enrik 2016.12.19 09:19 #113 @honest_knave- コメントありがとうございます。多くのことを感謝 - しかし、私は最初の@マルコvd Heijdenの コメントを試して開始しました。( それについては、あなたのコメントをすべて読みました。)Marco vd Heijden- ありがとう男。しかし、私は私が何か間違っていると思う、多分私はより明確に理解していない。とにかく私は試してみました、あなたは以下のコードを見つけることができます。私の間違いはどこにありますか、お願いします。//+------------------------------------------------------------------+//| keydown.mq4 |//| Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."#property link "https://www.mql5.com"#property version "1.00"#property strictstring prefix = "Custom Expert |";string lotedit = prefix + "Edit Name";string lotbtnplus = prefix + "Lot button Plus";string lotbtnminus = prefix + "Lot button Minus";double lot = 0.01, lotstep = 0.01 ;bool ctrl_click;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit(){//--- create timer EventSetTimer(60); graphicsObj();//--- return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason){//--- destroy timer EventKillTimer(); ObjectsDeleteAll( 0, prefix );}//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick(){//--- graphicsObj();}//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+void OnTimer() {//--- }//+------------------------------------------------------------------+void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam){ if( id == CHARTEVENT_CLICK ) { if ( sparam == lotbtnplus ) { ObjectSetInteger( 0, sparam, OBJPROP_STATE, false ); lot = lot + lotstep; update(); Print( " | lot plus : ", lot ); return; } Print( "Click" ); ctrl_click = 1; } if( id == CHARTEVENT_KEYDOWN ) { //Print(lparam);// print to identify keycode if( lparam == 17 ) // ctrl key { if( ctrl_click == 1 )// if mouse click { //Do Something when CTRL (keycode 17) is pressed if ( sparam == lotbtnplus ) { ObjectSetInteger( 0, sparam, OBJPROP_STATE, false ); lot = lot + ( lotstep * 10 ); Print( " | lot plus + Ctrl initial: ", lot ); update(); Print( " | lot plus + Ctrl: ", lot ); return; } Print( "Ctrl + Click" ); ctrl_click = 0; // reset } } ctrl_click = 0; // reset if not ctrl }}//|+--------------------------------------------------------------------------------+//| - Function Update |//|+--------------------------------------------------------------------------------+void update(){ //--- ObjectSetString( 0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ) ); //--- return;}void graphicsObj(){ ObjectCreate(0, lotedit, OBJ_EDIT, 0,0,0); ObjectSetInteger(0, lotedit, OBJPROP_XDISTANCE, 30); ObjectSetInteger(0, lotedit, OBJPROP_YDISTANCE, 30); ObjectSetInteger(0, lotedit, OBJPROP_XSIZE, 60); ObjectSetInteger(0, lotedit, OBJPROP_YSIZE, 30); ObjectSetString(0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 )); ObjectCreate( 0, lotbtnplus, OBJ_BUTTON, 0, 0, 0); ObjectSetString( 0, lotbtnplus, OBJPROP_TEXT, "+"); ObjectSetInteger( 0, lotbtnplus, OBJPROP_XDISTANCE, 100); ObjectSetInteger( 0, lotbtnplus, OBJPROP_YDISTANCE, 30); ObjectSetInteger( 0, lotbtnplus, OBJPROP_XSIZE, 70); ObjectSetInteger( 0, lotbtnplus, OBJPROP_YSIZE, 30); ObjectSetInteger( 0, lotbtnplus, OBJPROP_BACK, false); ObjectSetInteger( 0, lotbtnplus, OBJPROP_SELECTABLE, false);} expert advisor - miscellaneous 変数の内容が数値かどうかを確認するにはどうしたらよいですか? Help with chart event honest_knave 2016.12.19 09:38 #114 最初の問題は、CHARTEVENT_CLICK がCHARTEVENT_OBJECT_CLICK と同じでないことです。チャート上の任意のクリックではなく、オブジェクト上のクリックをキャッチしたいのです。void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam){// if( id == CHARTEVENT_CLICK ) if( id == CHARTEVENT_OBJECT_CLICK ) honest_knave 2016.12.19 10:12 #115 void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam){ static bool wasCTRL=false; if(id==CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus) { ObjectSetInteger( 0, sparam, OBJPROP_STATE, false ); lot+=(wasCTRL)?lotstep*10:lotstep; update(); Print( " | lot plus : ", lot ); return; } wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==17);} これは役に立つかもしれません。CTRLの後にボタンを押す速さによっては、マウスの2回目のクリックで0.1までしか上がらないことがあるかもしれません。 expert advisor - miscellaneous Resize Chart Window event List of Keycodes for Max Enrik 2016.12.19 10:24 #116 honest_knave: これは役に立つかもしれません。CTRL の後にボタンを押す速さによっては、マウスの 2 回目のクリックで 0.1 にしかならないことがあるかもしれません。#Ctrl + マウスボタン - 終了うわー、まさにその通り、すごい大感謝です。Honest_knaveと Marco vd Heijdenに 感謝します。 Max Enrik 2016.12.19 11:06 #117 #スプレッド・シート - オープン最新金曜日の' Spreadsheet'はOnTick関数によって更新されました(これは私が必要とするもので、私にとっては良いものでした)。(MT4プラットフォームが2回アップデートされました。) その後、このスプレッドシートがチャートに反映されません。また、スプレッドシートの上にBidとAskの価格を表示していますが、BidとAskは正常に動作していますが、スプレッドシートは正常に動作していません。そこで、ラベルオブジェクトに Label Functionを使用していますが、どのラベルオブジェクトも'Spreadsheet'がなくても正常に動作します。また、関数なしでスプレッドシートのラベルオブジェクトを作成した場合、正常に動作することをお知らせする必要があります。この問題は、MT4プラットフォームのアップグレード後に発生します。もし、私の心配を理解していただけるなら、どのようにこの問題を解決できるか教えてください。 よろしくお願いします。 Marco vd Heijden 2016.12.19 13:39 #118 表計算 ソフトのコードをお持ちでしたか? Max Enrik 2016.12.19 13:58 #119 Marco vd Heijden:表計算ソフトのコードをお持ちでしたか? 私はまだそれについて研究しています。また、私は近いうちに、そこから動作しているコードと動作していないコードのいくつかを投稿します。 Max Enrik 2016.12.19 15:01 #120 ラベル 関数を2つ作成することはできますか?(例:1つはテキスト用、2つはテキストとフォントサイズ 用。) 1...5678910111213141516171819...43 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そうですね。
微妙に違うトホホ。
グローバルかスタティックかは、ここでもそこでもありません。しかし、あなたのリセット方法は優れています。オーバーランを防ぐことができます。
早とちりでした。あなたのは逆方向のオーバーランです。後でCTRLを押すと発動します。チャートをクリックしてからCTRLを押せば発動します。
@honest_knave- コメントありがとうございます。多くのことを感謝 - しかし、私は最初の@マルコvd Heijdenの コメントを試して開始しました。( それについては、あなたのコメントをすべて読みました。)
Marco vd Heijden- ありがとう男。
しかし、私は私が何か間違っていると思う、多分私はより明確に理解していない。とにかく私は試してみました、あなたは以下のコードを見つけることができます。
私の間違いはどこにありますか、お願いします。
//| keydown.mq4 |
//| Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
string prefix = "Custom Expert |";
string lotedit = prefix + "Edit Name";
string lotbtnplus = prefix + "Lot button Plus";
string lotbtnminus = prefix + "Lot button Minus";
double lot = 0.01, lotstep = 0.01 ;
bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
graphicsObj();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
ObjectsDeleteAll( 0, prefix );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
graphicsObj();
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if( id == CHARTEVENT_CLICK )
{
if ( sparam == lotbtnplus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot = lot + lotstep;
update();
Print( " | lot plus : ", lot );
return;
}
Print( "Click" );
ctrl_click = 1;
}
if( id == CHARTEVENT_KEYDOWN )
{
//Print(lparam);// print to identify keycode
if( lparam == 17 ) // ctrl key
{
if( ctrl_click == 1 )// if mouse click
{
//Do Something when CTRL (keycode 17) is pressed
if ( sparam == lotbtnplus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot = lot + ( lotstep * 10 );
Print( " | lot plus + Ctrl initial: ", lot );
update();
Print( " | lot plus + Ctrl: ", lot );
return;
}
Print( "Ctrl + Click" );
ctrl_click = 0; // reset
}
}
ctrl_click = 0; // reset if not ctrl
}
}
//|+--------------------------------------------------------------------------------+
//| - Function Update |
//|+--------------------------------------------------------------------------------+
void update()
{
//---
ObjectSetString( 0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ) );
//---
return;
}
{
ObjectCreate(0, lotedit, OBJ_EDIT, 0,0,0);
ObjectSetInteger(0, lotedit, OBJPROP_XDISTANCE, 30);
ObjectSetInteger(0, lotedit, OBJPROP_YDISTANCE, 30);
ObjectSetInteger(0, lotedit, OBJPROP_XSIZE, 60);
ObjectSetInteger(0, lotedit, OBJPROP_YSIZE, 30);
ObjectSetString(0, lotedit, OBJPROP_TEXT, DoubleToString( lot, 2 ));
ObjectCreate( 0, lotbtnplus, OBJ_BUTTON, 0, 0, 0);
ObjectSetString( 0, lotbtnplus, OBJPROP_TEXT, "+");
ObjectSetInteger( 0, lotbtnplus, OBJPROP_XDISTANCE, 100);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_YDISTANCE, 30);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_XSIZE, 70);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_YSIZE, 30);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_BACK, false);
ObjectSetInteger( 0, lotbtnplus, OBJPROP_SELECTABLE, false);
}
最初の問題は、CHARTEVENT_CLICK がCHARTEVENT_OBJECT_CLICK と同じでないことです。チャート上の任意のクリックではなく、オブジェクト上のクリックをキャッチしたいのです。
const long &lparam,
const double &dparam,
const string &sparam)
{
// if( id == CHARTEVENT_CLICK )
if( id == CHARTEVENT_OBJECT_CLICK )
const long &lparam,
const double &dparam,
const string &sparam)
{
static bool wasCTRL=false;
if(id==CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus)
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
lot+=(wasCTRL)?lotstep*10:lotstep;
update();
Print( " | lot plus : ", lot );
return;
}
wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==17);
}
これは役に立つかもしれません。CTRL の後にボタンを押す速さによっては、マウスの 2 回目のクリックで 0.1 にしかならないことがあるかもしれません。
#Ctrl + マウスボタン - 終了
うわー、まさにその通り、すごい大感謝です。
Honest_knaveと Marco vd Heijdenに 感謝します。
(MT4プラットフォームが2回アップデートされました。) その後、このスプレッドシートがチャートに反映されません。
また、スプレッドシートの上にBidとAskの価格を表示していますが、BidとAskは正常に動作していますが、スプレッドシートは正常に動作していません。
もし、私の心配を理解していただけるなら、どのようにこの問題を解決できるか教えてください。
よろしくお願いします。
表計算 ソフトのコードをお持ちでしたか?
表計算ソフトのコードをお持ちでしたか?
ラベル 関数を2つ作成することはできますか?
(例:1つはテキスト用、2つはテキストとフォントサイズ 用。)