专家顾问 - 杂项问题 - 页 12 1...5678910111213141516171819...43 新评论 honest_knave 2016.12.18 20:36 #111 Marco vd Heijden:我想是的。这一点略有不同,但。 全局与静态的问题既不在这里也不在那里。但你的重置方法是好的。它可以防止超限。 honest_knave 2016.12.18 20:38 #112 honest_knave: 全局与静态的问题既不在这里也不在那里。但你的重置方法是好的。它可以防止超限。我说得太早了。你的超限是在另一个方向。它将在以后按CTRL时触发。如果你点击图表,然后按CTRL,就会触发。 Max Enrik 2016.12.19 10:19 #113 @honest_knave- 谢谢你的评论。非常感谢 - 但我开始先尝试@Marco 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 10: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 11: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);} 这可能有帮助。你可能会发现,只有在第二次点击鼠标的时候才会到0.1,这取决于你在CTRL之后按按钮的速度。 expert advisor - miscellaneous Resize Chart Window event List of Keycodes for Max Enrik 2016.12.19 11:24 #116 honest_knave: 这可能有帮助。你可能会发现,只有在第二次点击鼠标的时候才会到0.1,这取决于你在CTRL之后按下按钮的速度。#Ctrl + 鼠标键 - 关闭哇,就像它一样,惊人的巨大的感谢诚实的!特别感谢@honest_knave 和@Marco vd Heijden Max Enrik 2016.12.19 12:06 #117 #SpreadSheet - 打开上周五"Spreadsheet"被OnTick函数更新(我需要这个函数,它对我很好)。(MT4平台更新了两次。) 更新后,这个电子表格没有在图表上更新,我检查了关于电子表格的一切,我没有看到任何问题。我需要说明的是,我也在电子表格上使用了买入和卖出价格,买入和卖出价格运行良好,但电子表格却没有。所以我对标签对象 使用了标签 功能--每一个标签对象在没有 "电子表格 "的情况下都运行良好。另外,我需要告知大家,当我为电子表格创建Label对象时,如果没有功能,它也能正常工作。这个问题是在MT4平台升级后开始的,我不确定这个问题是怎么来的。如果您理解我的担忧,请告诉我如何解决这个问题。 谢谢。 Marco vd Heijden 2016.12.19 14:39 #118 你有一些关于电子表格 的代码吗? Max Enrik 2016.12.19 14:58 #119 Marco vd Heijden:你有一些关于电子表格的代码吗? 我还在研究这个问题,我也会很快发布一些代码,哪些是有效的,哪些是无效的。 Max Enrik 2016.12.19 16:01 #120 我可以写两个不同的标签 函数吗?(例如:1个用于文本,2个用于文本和字体大小。) 1...5678910111213141516171819...43 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我想是的。
这一点略有不同,但。
全局与静态的问题既不在这里也不在那里。但你的重置方法是好的。它可以防止超限。
我说得太早了。你的超限是在另一个方向。它将在以后按CTRL时触发。如果你点击图表,然后按CTRL,就会触发。
@honest_knave- 谢谢你的评论。非常感谢 - 但我开始先尝试@Marco 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);
}
这可能有帮助。你可能会发现,只有在第二次点击鼠标的时候才会到0.1,这取决于你在CTRL之后按下按钮的速度。
#Ctrl + 鼠标键 - 关闭
哇,就像它一样,惊人的巨大的感谢诚实的!
特别感谢@honest_knave 和@Marco vd Heijden
(MT4平台更新了两次。) 更新后,这个电子表格没有在图表上更新,我检查了关于电子表格的一切,我没有看到任何问题。
我需要说明的是,我也在电子表格上使用了买入和卖出价格,买入和卖出价格运行良好,但电子表格却没有。
如果您理解我的担忧,请告诉我如何解决这个问题。
谢谢。
你有一些关于电子表格 的代码吗?
你有一些关于电子表格的代码吗?
我可以写两个不同的标签 函数吗?
(例如:1个用于文本,2个用于文本和字体大小。)