专家顾问 - 杂项问题 - 页 11 1...456789101112131415161718...43 新评论 honest_knave 2016.12.16 14:20 #101 Max Enrik:在你帮助我之后,下面的代码工作得非常好,谢谢你,伙计。我按你说的重命名了,效果不错,但我想知道,我是不是做错了什么?(只是我很担心)担心你的代码是否能工作是非常正常的(确实是健康的)。我们经常会看到一些可以编译的代码,但却做不到我们想要的效果(因为人为错误和/或缺乏知识)。最好的方法是养成打印变量和检查 返回代码的习惯。一旦你测试过了,你就可以删除打印语句。使用你上面的代码片段,你可以添加一个简单的Print("SL值:"+sl),然后检查你的专家日志,看看数值是否是你所期望的。 William Roeder 2016.12.16 16:06 #102 Max Enrik: 只是我在想,我是不是做错了什么? { sl = Bid + points_to_change( stoploss * 10 ); } 你为什么要乘以10?如果止损 是以点为单位,通过pips_to_change 进行转换,这样就可以在4位数的经纪商上使用。 Max Enrik 2016.12.17 07:59 #103 Marco vd Heijden: 这很简单,如果它按设计工作,你就没有做错什么,否则它根本就不工作。#Checkmark - 关闭是的!我接受这个位图标签 已经花了我很长时间了。最后,我得到了我想要的东西... 当然,巨大的人,谢谢你的帮助。我像下面的代码一样解决我的问题。void ordersell(){ // Sell set Stop Loss with bitmap label // when bitmap label shows - ON if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == true ) { sl = Bid + points_to_change( stoploss * 10 ); Print( " | TRUE : Active | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl ); } // when bitmap label shows - OFF if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == false ) { sl = 0; Print( " | FALSE : Inactive | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl ); } // call your stop loss 'sl' ticket = OrderSend( ..., sl, ... ); // sounds if ( ticket > 0 ) { PlaySound( "ok.wav" ); } else { PlaySound( "timeout.wav" ); } return;} expert advisor - miscellaneous I need a HELP First Script, I need Max Enrik 2016.12.17 08:09 #104 honest_knave:最好的方法是养成打印变量和检查返回代码的习惯。一旦你测试过了,你就可以删除打印语句。 使用你上面的代码片段,你可以添加一个简单的Print("SL值:"+sl),然后检查你的专家日志,看看数值是否是你期望的。我已经在使用它了,但有时我怀疑我的代码,因为如果你检查 我的#Checkmark 问题,我希望你能更清楚地理解我。 总之 谢谢你的时间。 Max Enrik 2016.12.17 08:49 #105 whroeder1: 你为什么要乘以10?如果止损 是以点为单位,通过pips_to_change 进行转换,以便在4位数的经纪商上工作。哦!是的,伙计,好问题,我已经改变了。谢谢你的关注。 Max Enrik 2016.12.17 11:05 #106 #止损/止盈--关闭谢谢你更清楚的 评论,马可。 祝你一切顺利。 特别感谢@Marco vd Heijden Max Enrik 2016.12.18 11:38 #107 #Ctrl + 鼠标按钮 - 打开我花了几个小时,如何才能找到关于这个问题的好的文档,但我没有得到任何好的信息和文档。 我只需要当我点击'Left Mouse + Ctrl'时,Lot 大小增加0.1。(通常是增加0.01)。我想找到关于这个问题的文档和文章,并举例说明。谢谢。 honest_knave 2016.12.18 13:01 #108 Max Enrik:#Ctrl + 鼠标按钮 - 打开我花了几个小时,如何才能找到关于这个问题的好文件,我没有得到任何好的信息和文件。 我只需要当我点击'鼠标左键+Ctrl'时,Lot 大小增加0.1。(通常是增加0.01)。我想找到关于这个问题的文档和文章,并举例说明。谢谢。我不知道有什么简单的方法来捕获组合键。如果你想增加0.1而不是0.01,最好能有第二个按钮来点击。尽管如此,你可以尝试以下方法。检查 上一个事件是否是按键CTRL。如果是的话,检查这个事件是否是鼠标点击。但是,这种方法有一些问题。1.如果在击键和鼠标点击之间发生任何 其他图表事件,就会失败。2.你会得到一些由鼠标点击和释放CTRL之间的延迟引起的超限。这方面的解决方法会带来他们自己的问题。也许其他一些人会有更好的主意。#define CTRL 17void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { static bool wasCTRL=false; if(wasCTRL && id==CHARTEVENT_CLICK) Print("CTRL+CLICK detected"); wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==CTRL); } expert advisor - miscellaneous List of Keycodes for CHARTEVENT_CLICK 这个event不能输出X,Y坐标 Marco vd Heijden 2016.12.18 19:08 #109 //+------------------------------------------------------------------+//| 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 strictbool ctrl_click;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//--- create timer EventSetTimer(60);//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- destroy timer EventKillTimer(); }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() {//--- }//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+void OnTimer() {//--- }//+------------------------------------------------------------------+void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { if(id==CHARTEVENT_CLICK) { //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 Print("CTRL+CLICK"); ctrl_click=0; // reset } } ctrl_click=0; // reset if not ctrl } }//+------------------------------------------------------------------+ expert advisor - miscellaneous 初学者的问题 MQL4 MT4 MetaTrader Plese help me Marco vd Heijden 2016.12.18 19:32 #110 我想是的。这略有不同,但。 1...456789101112131415161718...43 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在你帮助我之后,下面的代码工作得非常好,谢谢你,伙计。
我按你说的重命名了,效果不错,但我想知道,我是不是做错了什么?
(只是我很担心)
担心你的代码是否能工作是非常正常的(确实是健康的)。我们经常会看到一些可以编译的代码,但却做不到我们想要的效果(因为人为错误和/或缺乏知识)。
最好的方法是养成打印变量和检查 返回代码的习惯。一旦你测试过了,你就可以删除打印语句。
使用你上面的代码片段,你可以添加一个简单的Print("SL值:"+sl),然后检查你的专家日志,看看数值是否是你所期望的。
这很简单,如果它按设计工作,你就没有做错什么,否则它根本就不工作。
#Checkmark - 关闭
是的!我接受这个位图标签 已经花了我很长时间了。最后,我得到了我想要的东西...
当然,巨大的人,谢谢你的帮助。
我像下面的代码一样解决我的问题。
{
// Sell set Stop Loss with bitmap label
// when bitmap label shows - ON
if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == true )
{
sl = Bid + points_to_change( stoploss * 10 );
Print( " | TRUE : Active | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
}
// when bitmap label shows - OFF
if ( ObjectGetInteger( 0, "bitmap label on off", OBJPROP_STATE ) == false )
{
sl = 0;
Print( " | FALSE : Inactive | ", "Bid: ", Bid, " | ", "Stop Loss: ", sl );
}
// call your stop loss 'sl'
ticket = OrderSend( ..., sl, ... );
// sounds
if ( ticket > 0 )
{ PlaySound( "ok.wav" ); } else
{ PlaySound( "timeout.wav" ); }
return;
}
最好的方法是养成打印变量和检查返回代码的习惯。一旦你测试过了,你就可以删除打印语句。
使用你上面的代码片段,你可以添加一个简单的Print("SL值:"+sl),然后检查你的专家日志,看看数值是否是你期望的。
我已经在使用它了,但有时我怀疑我的代码,因为如果你检查 我的#Checkmark 问题,我希望你能更清楚地理解我。
总之 谢谢你的时间。
你为什么要乘以10?如果止损 是以点为单位,通过pips_to_change 进行转换,以便在4位数的经纪商上工作。
哦!是的,伙计,好问题,我已经改变了。谢谢你的关注。
#止损/止盈--关闭
谢谢你更清楚的 评论,马可。
特别感谢@Marco vd Heijden祝你一切顺利。
#Ctrl + 鼠标按钮 - 打开
我花了几个小时,如何才能找到关于这个问题的好的文档,但我没有得到任何好的信息和文档。
我只需要当我点击'Left Mouse + Ctrl'时,Lot 大小增加0.1。(通常是增加0.01)。
我想找到关于这个问题的文档和文章,并举例说明。
谢谢。
#Ctrl + 鼠标按钮 - 打开
我花了几个小时,如何才能找到关于这个问题的好文件,我没有得到任何好的信息和文件。
我只需要当我点击'鼠标左键+Ctrl'时,Lot 大小增加0.1。(通常是增加0.01)。
我想找到关于这个问题的文档和文章,并举例说明。
谢谢。
我不知道有什么简单的方法来捕获组合键。如果你想增加0.1而不是0.01,最好能有第二个按钮来点击。
尽管如此,你可以尝试以下方法。
检查 上一个事件是否是按键CTRL。
如果是的话,检查这个事件是否是鼠标点击。
但是,这种方法有一些问题。
1.如果在击键和鼠标点击之间发生任何 其他图表事件,就会失败。
2.你会得到一些由鼠标点击和释放CTRL之间的延迟引起的超限。这方面的解决方法会带来他们自己的问题。
也许其他一些人会有更好的主意。
const long &lparam,
const double &dparam,
const string &sparam)
{
static bool wasCTRL=false;
if(wasCTRL && id==CHARTEVENT_CLICK) Print("CTRL+CLICK detected");
wasCTRL=(id==CHARTEVENT_KEYDOWN && lparam==CTRL);
}
//| 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
bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if(id==CHARTEVENT_CLICK)
{
//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
Print("CTRL+CLICK");
ctrl_click=0; // reset
}
}
ctrl_click=0; // reset if not ctrl
}
}
//+------------------------------------------------------------------+
我想是的。
这略有不同,但。