专家顾问 - 杂项问题 - 页 11

 
Max Enrik:

在你帮助我之后,下面的代码工作得非常好,谢谢你,伙计。

我按你说的重命名了,效果不错,但我想知道,我是不是做错了什么?
(只是我很担心)

担心你的代码是否能工作是非常正常的(确实是健康的)。我们经常会看到一些可以编译的代码,但却做不到我们想要的效果(因为人为错误和/或缺乏知识)。

最好的方法是养成打印变量和检查 返回代码的习惯。一旦你测试过了,你就可以删除打印语句。

使用你上面的代码片段,你可以添加一个简单的Print("SL值:"+sl),然后检查你的专家日志,看看数值是否是你所期望的。

 
Max Enrik: 只是我在想,我是不是做错了什么?
    { sl = Bid + points_to_change( stoploss * 10 ); }
你为什么要乘以10?如果止损 是以点为单位,通过pips_to_change 进行转换,这样就可以在4位数的经纪商上使用。
 
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;
}
 
honest_knave:

最好的方法是养成打印变量和检查返回代码的习惯。一旦你测试过了,你就可以删除打印语句。
使用你上面的代码片段,你可以添加一个简单的Print("SL值:"+sl),然后检查你的专家日志,看看数值是否是你期望的。

我已经在使用它了,但有时我怀疑我的代码,因为如果你检查 我的#Checkmark 问题,我希望你能更清楚地理解我。
总之
谢谢你的时间。

 
whroeder1:
你为什么要乘以10?如果止损 是以点为单位,通过pips_to_change 进行转换,以便在4位数的经纪商上工作。

哦!是的,伙计,好问题,我已经改变了。谢谢你的关注

 

#止损/止盈--关闭

谢谢你更清楚的 评论,马可。
祝你一切顺利。

特别感谢@Marco vd Heijden

 

#Ctrl + 鼠标按钮 - 打开

我花了几个小时,如何才能找到关于这个问题的好的文档,但我没有得到任何好的信息和文档。
我只需要当我点击'Left Mouse + Ctrl'时,Lot 大小增加0.1。(通常是增加0.01)。

我想找到关于这个问题的文档和文章,并举例说明。

谢谢。

 
Max Enrik:

#Ctrl + 鼠标按钮 - 打开

我花了几个小时,如何才能找到关于这个问题的好文件,我没有得到任何好的信息和文件。
我只需要当我点击'鼠标左键+Ctrl'时,Lot 大小增加0.1。(通常是增加0.01)。

我想找到关于这个问题的文档和文章,并举例说明。

谢谢。

我不知道有什么简单的方法来捕获组合键。如果你想增加0.1而不是0.01,最好能有第二个按钮来点击。

尽管如此,你可以尝试以下方法。

检查 上一个事件是否是按键CTRL。

如果是的话,检查这个事件是否是鼠标点击。

但是,这种方法有一些问题。

1.如果在击键和鼠标点击之间发生任何 其他图表事件,就会失败。

2.你会得到一些由鼠标点击和释放CTRL之间的延迟引起的超限。这方面的解决方法会带来他们自己的问题。

也许其他一些人会有更好的主意。

#define CTRL 17

void 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);
  }
 
//+------------------------------------------------------------------+
//|                                                      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
     }
  }
//+------------------------------------------------------------------+
 

我想是的。

这略有不同,但。