打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
新手:一个EA源码的详细注释,请大家帮忙解释一下

新手:一个EA源码的详细注释,请大家帮忙解释一下

(2011-06-14 10:52:04)
标签:

杂谈

分类: MQL4

新手有个ea的部份地方看不懂,请大家帮忙解释一下,下面是我自已注解上去的,如果注解错了,也请指出,还有我不明白的地方,请帮忙
解释一下。

#define SIGNAL_NONE 0                 //预定义  这里起什么作用呀??
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

extern bool EachTickMode = True;      //EachTickMode = True
extern double Lots = 1.0;           //每次下单手数
extern int Slippage = 3;            //成交单数允许的滑动点数
extern bool UseStopLoss = True;       //是否使用止损
extern int StopLoss = 30;           //止损点数
extern bool UseTakeProfit = True;      //是否使用止赢
extern int TakeProfit = 60;          //止赢点数
extern bool UseTrailingStop = True;    //是否使用跟踪止赢
extern int TrailingStop = 30;        //跟踪止赢点数

int BarCount;                   //自定义
int Current;                     //自定义
bool TickCheck = False;          

int init() {
   BarCount =Bars;              // BarCount=当前K线图所有的历史K线个数

   if (EachTickMode) Current = 0;else Current = 1;   
//如果 EachTickMode 是真的,Current = 0,是假的Current = 1 ,请问 这里Current起到什么作用???

   return(0);
}

int deinit() {
   return(0);
}

int start() {
   int Order =SIGNAL_NONE;           //自定义  Order =SIGNAL_NONE
   int Total,Ticket;               //自定义  Total,Ticket
   double StopLossLevel,TakeProfitLevel;//自定义  StopLossLevel,TakeProfitLevel

   if (EachTickMode&& Bars != BarCount) TickCheck =False;
// 如果 EachTickMode和  当前K线图所有的历史K线个数  不等于BarCount  是真的,TickCheck =False  ,请问这里起什么作用??
   Total =OrdersTotal();   // Total =OrdersTotal(),OrdersTotal 是下单的意思吗??
   Order =SIGNAL_NONE;    // Order =SIGNAL_NONE ,这里起什么作用呀???

......


//Check position        检查位置
   bool IsTrade =False;  //  自定义  IsTrade= False

   for (int i = 0; i< Total; i ++)    //  自定义i = 0  ,如果 i <Total,运行 i ++  意思是 如果 i< Total,i+1 是这样吗?
{
     OrderSelect(i, SELECT_BY_POS,MODE_TRADES);  //这里是什么意思?起什么作用????????
     if(OrderType() <= OP_SELL&&  OrderSymbol()== Symbol())    //这里是什么意思?
{
        IsTrade =True;
       if(OrderType() == OP_BUY)  //  如果已经开有买单,这里是这个意思吗?
{

         //+------------------------------------------------------------------+
          //| SignalBegin(Exit Buy)     信号开始(退出购买)             |
         //+------------------------------------------------------------------+
              ..............

if (Order == SIGNAL_CLOSEBUY &&((EachTickMode && !TickCheck) ||(!EachTickMode && (Bars !=BarCount))))
// 这里是什么意思 ?起什么作用?
{
           OrderClose(OrderTicket(), OrderLots(), Bid,Slippage, MediumSeaGreen);  //这里是什么意思 ?起什么作用?

            if(SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Bid, Digits) + " Close Buy");
// 这里是什么意思 ?起什么作用?

            if(!EachTickMode) BarCount = Bars; // 这里是什么意思 ?起什么作用?
            IsTrade =False;
           continue;
          }



//Trailing stop     移动止损
         if(UseTrailingStop&& TrailingStop > 0)// 如果 UseTrailingStop 和TrailingStop > 0是真就运行下面。是这个意思吗?
           
            if(Bid -OrderOpenPrice() > Point *TrailingStop)  //这里是什么意思?起什么作用?
{
             if(OrderStopLoss() < Bid - Point *TrailingStop) //这里是什么意思 ?起什么作用?

{
               OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Point * TrailingStop, OrderTakeProfit(), 0,

MediumSeaGreen);  //这里是什么意思?起什么作用?是要平仓的意思吗?
                if(!EachTickMode) BarCount = Bars;
               continue;
              }
            }
          }

.................  信号开始(退出卖出)跟上面差不多,只要解释上面的下面就了解了....

//+------------------------------------------------------------------+
   //| SignalBegin(Entry)    信号开始  买  卖                  |
  //+------------------------------------------------------------------+

   if (Buy1_1 >Buy1_2 && Buy2_1 >Buy2_2) Order = SIGNAL_BUY;

   if (Sell1_1 <Sell1_2 && Sell2_1 <Sell2_2) Order = SIGNAL_SELL;


  //+------------------------------------------------------------------+
   //| SignalEnd                                       |
  //+------------------------------------------------------------------+

   //Buy     
   if (Order == SIGNAL_BUY&& ((EachTickMode&& !TickCheck) || (!EachTickMode&& (Bars != BarCount))))
// ((EachTickMode && !TickCheck) ||(!EachTickMode && (Bars !=BarCount)))  这几个都是什么意思,起什么作用??

{
     if(!IsTrade)    //这里是什么意思,起什么作用????

{
        //Check freemargin    检查可用保证金
        if(AccountFreeMargin() < (1000 * Lots)) {
          Print("Wehave no money. Free Margin = ", AccountFreeMargin());
         return(0);
        }

        if(UseStopLoss) StopLossLevel = Ask - StopLoss * Point; elseStopLossLevel =0.0;  //这里是什么意思??
        if(UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; elseTakeProfitLevel = 0.0; //这里是什么意思??

        Ticket =OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel,TakeProfitLevel, "Buy(#" + MagicNumber +

")", MagicNumber, 0,DodgerBlue);  //这里是什么意思??

        if(Ticket> 0)    // 如果Ticket> 0 是真的,就运行下面, Ticket是什么??

{
          if(OrderSelect(Ticket, SELECT_BY_TICKET,MODE_TRADES))  //这里是什么意思??  

{
                       Print("BUYorder opened : ",OrderOpenPrice());  // Print是输出的意思吧??? 这里起什么作用呀??

             if(SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Ask, Digits) + " Open Buy");
//这里是什么意思??

                  }
else
{
                       Print("Erroropening BUY order : ", GetLastError()); // Print是输出的意思吧???这里起什么作用呀??
                  }
        }
        if(EachTickMode) TickCheck =True;  //这里是什么意思??  这里起什么作用呀??
        if(!EachTickMode) BarCount = Bars; //这里是什么意思??  这里起什么作用呀??
       return(0);
     }
   }

..........................下面的是卖出的...基本上跟买进的一个样,解释上面,下面的我就可以明白了....

 

 

 

看过注释后我只能说 你对EA的编程了解不多,那么我能解释的尽量解释:

本帖隐藏的内容需要回复才可以浏览

  1. #define SIGNAL_NONE 0//预定义这里起什么作用呀??这里是预定义部分,就是用一串文字组合代替后面的数字,后面语句里用到这种字符串组合的地方就是使用对应的数字
  2. #define SIGNAL_BUY 1
  3. #define SIGNAL_SELL 2
  4. #define SIGNAL_CLOSEBUY 3
  5. #define SIGNAL_CLOSESELL 4

  6. extern bool EachTickMode = True; //EachTickMode =True
  7. extern double Lots = 1.0; //每次下单手数
  8. extern int Slippage = 3; //成交单数允许的滑动点数
  9. extern bool UseStopLoss = True; //是否使用止损
  10. extern int StopLoss = 30; //止损点数
  11. extern bool UseTakeProfit = True; //是否使用止赢
  12. extern int TakeProfit = 60; //止赢点数
  13. extern bool UseTrailingStop = True; //是否使用跟踪止赢
  14. extern int TrailingStop = 30; //跟踪止赢点数

  15. int BarCount; //自定义
  16. int Current; //自定义
  17. bool TickCheck = False;

  18. int init() {
  19. BarCount = Bars; // BarCount =当前K线图所有的历史K线个数

  20. if (EachTickMode) Current = 0; else Current = 1;
  21. //如果 EachTickMode 是真的,Current = 0,是假的Current = 1 ,请问 这里Current起到什么作用???这里Current用于去顶计算指标所用的K线序号,如果EachTickMode为真,则使用current=0也就是当前动态K线的数值进行计算。如果为假则始终K线序号为1的上一根K线的数据进行计算

  22. return(0);
  23. }

  24. int deinit() {
  25. return(0);
  26. }

  27. int start() {
  28. int Order = SIGNAL_NONE; //自定义 Order = SIGNAL_NONE
  29. int Total, Ticket; //自定义 Total, Ticket
  30. double StopLossLevel, TakeProfitLevel; //自定义 StopLossLevel,TakeProfitLevel

  31. if (EachTickMode && Bars !=BarCount) TickCheck = False;
  32. // 如果 EachTickMode 和 当前K线图所有的历史K线个数 不等于 BarCount 是真的,TickCheck= False ,请问这里起什么作用??
  33. Bars != BarCount意思是新的K线刚刚产生的时候
  34. Total = OrdersTotal(); // Total = OrdersTotal(),OrdersTotal是下单的意思吗??OrdersTotal函数是当前持仓总个数
  35. Order = SIGNAL_NONE; // Order = SIGNAL_NONE,这里起什么作用呀???Order是作者自己定义个信号标示

  36. ......


  37. //Check position 检查位置
  38. bool IsTrade = False; // 自定义 IsTrade = False

  39. for (int i = 0; i < Total; i ++) // 自定义 i = 0,如果 i < Total,运行 i ++ 意思是 如果 i <Total,i+1 是这样吗?
  40. {
  41. OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//这里是什么意思?起什么作用????????OrderSelect函数的作用是锁定一个订单,然后才能查询这个订单的具体内容,例如开盘价止损止盈等等订单信息
  42. if(OrderType() <= OP_SELL&& OrderSymbol() == Symbol())//这里是什么意思 ?意思是如果持仓单是BUY或SELL并且是当前K线所对应的货币的持仓单
  43. {
  44. IsTrade = True;
  45. if(OrderType() == OP_BUY) //如果已经开有买单,这里是这个意思吗?意思是,如果这个持仓单是买单的话。。。。
  46. {

  47. //+------------------------------------------------------------------+
  48. //| Signal Begin(Exit Buy) 信号开始(退出购买) |
  49. //+------------------------------------------------------------------+
  50. ..............

  51. if (Order == SIGNAL_CLOSEBUY &&((EachTickMode && !TickCheck) ||(!EachTickMode && (Bars !=BarCount))))意思是如果计算得出要发出买单出场动作,同时需要检测动态K线,同时又发生新K线出现这些情况的话。。。。
  52. // 这里是什么意思 ?起什么作用?
  53. {
  54. OrderClose(OrderTicket(), OrderLots(), Bid, Slippage,MediumSeaGreen); // 这里是什么意思 ?起什么作用?买单平仓

  55. if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "]" + DoubleToStr(Bid, Digits) + " Close Buy");
  56. // 这里是什么意思 ?起什么作用?是否发出报警邮件

  57. if (!EachTickMode) BarCount = Bars; //这里是什么意思?起什么作用?K线个数变量复位
  58. IsTrade = False;
  59. continue;
  60. }



  61. //Trailing stop 移动止损
  62. if(UseTrailingStop &&TrailingStop > 0) // 如果 UseTrailingStop和TrailingStop > 0 是真就运行下面。是这个意思吗?是
  63. {
  64. if(Bid - OrderOpenPrice() > Point *TrailingStop) //这里是什么意思 ?起什么作用?移动止损判断
  65. {
  66. if(OrderStopLoss() < Bid - Point * TrailingStop)//这里是什么意思 ?起什么作用?同上

  67. {
  68. OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point *TrailingStop, OrderTakeProfit(), 0,

  69. MediumSeaGreen);//这里是什么意思?起什么作用?是要平仓的意思吗?如果满足移动止损调整的条件,这里执行修改持仓单止盈止损的动作
  70. if (!EachTickMode) BarCount = Bars;
  71. continue;
  72. }
  73. }
  74. }

  75. ................. 信号开始(退出卖出)跟上面差不多,只要解释上面的下面就了解了....

  76. //+------------------------------------------------------------------+
  77. //| Signal Begin(Entry) 信号开始 买 卖 |
  78. //+------------------------------------------------------------------+

  79. if (Buy1_1 > Buy1_2&& Buy2_1 > Buy2_2)Order = SIGNAL_BUY;

  80. if (Sell1_1 < Sell1_2&& Sell2_1 <Sell2_2) Order = SIGNAL_SELL;


  81. //+------------------------------------------------------------------+
  82. //| Signal End |
  83. //+------------------------------------------------------------------+

  84. //Buy 买
  85. if (Order == SIGNAL_BUY &&((EachTickMode && !TickCheck) ||(!EachTickMode && (Bars !=BarCount))))
  86. // ((EachTickMode &&!TickCheck) || (!EachTickMode &&(Bars != BarCount))) 这几个都是什么意思 ,起什么作用??

  87. {
  88. if(!IsTrade) // 这里是什么意思 ,起什么作用????

  89. {
  90. //Check free margin 检查可用保证金
  91. if (AccountFreeMargin() < (1000 * Lots)){
  92. Print("We have no money. Free Margin = ",AccountFreeMargin());
  93. return(0);
  94. }

  95. if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; elseStopLossLevel = 0.0; //这里是什么意思??
  96. if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point;else TakeProfitLevel = 0.0; //这里是什么意思??

  97. Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber +

  98. ")", MagicNumber, 0, DodgerBlue); //这里是什么意思??

  99. if(Ticket > 0) // 如果Ticket > 0是真的,就运行下面, Ticket是什么??

  100. {
  101. if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))//这里是什么意思??

  102. {
  103. Print("BUY order opened : ", OrderOpenPrice()); // Print是输出的意思吧??? 这里起什么作用呀??

  104. if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "]" + DoubleToStr(Ask, Digits) + " Open Buy");
  105. //这里是什么意思??

  106. }
  107. else
  108. {
  109. Print("Error opening BUY order : ", GetLastError()); // Print是输出的意思吧??? 这里起什么作用呀??
  110. }
  111. }
  112. if (EachTickMode) TickCheck = True; //这里是什么意思??这里起什么作用呀??
  113. if (!EachTickMode) BarCount = Bars; //这里是什么意思??这里起什么作用呀??
  114. return(0);
  115. }
  116. }

 

第126 行 下面我还有点不明白, 请在帮忙指点指点..

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; elseStopLossLevel = 0.0;
//如果 使用止损   StopLossLevel=   买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; elseTakeProfitLevel = 0.0;
//如果使用止赢  TakeProfitLevel=买入价+止赢点数*Point
// 上面两句我看了看,是不是这个意思..  我想问???  为什么是 StopLoss *Point或者 TakeProfit *Point  直接  用StopLoss或者 TakeProfit 不行吗? ?

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")",MagicNumber, 0, DodgerBlue);
//  OrderSend(Symbol()这个是进行开仓的动作吧? 那 Ticket = OrderSend(Symbol()是起到什么作用呢? 是不是把这个开仓动作传到

Ticket上面来呀... 如果是...? 假我有几个..
Ticket1 = OrderSend(Symbol()...
Ticket2 = OrderSend(Symbol()...
这样的话,是不是可以做几次开仓动作了呢?
(Symbol(), OP_BUY, Lots, Ask, Slippage,StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")",MagicNumber, 0, DodgerBlue)
Symbol() 是当前,OP_BUY 是买开, Lots 下单手数,Slippage允许的滑动点数,StopLossLevel 止损点数
,TakeProfitLevel 止赢点数  ,"Buy(#" +MagicNumber + ")" 这里起什么作用呀??什么意思 ,还有后面三个?是什么意思,起什么作用...
MagicNumber, 0, DodgerBlue

if(Ticket > 0) // 如果Ticket> 0 是真的,就运行下面,Ticket就是上面,开仓的动作是吧??是不是用来分析开仓成不成功了?
{
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
//OrderSelect函数的作用是锁定一个订单,然后才能查询这个订单的具体内容  ,那(Ticket, SELECT_BY_TICKET,MODE_TRADES)是什么?
{
Print("BUY order opened : ", OrderOpenPrice()); // Print是输出的意思吧???这里起什么作用呀??
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Ask, Digits) + " Open Buy");
//是否发出报警邮件,是这样呀,那,如果,使用发送邮件呢,,怎么处理......?????
}

 

第126 行 下面我还有点不明白, 请在帮忙指点指点..

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; elseStopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; elseTakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit *Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLossTakeProfit是整数的点数个数需要乘以Point后变成实际的价格差距

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")",MagicNumber, 0, DodgerBlue);
// OrderSend(Symbol() 这个是进行开仓的动作吧? 那 Ticket = OrderSend(Symbol()是起到什么作用呢? 是不是把这个开仓动作传到

Ticket上面来呀... 如果是...? 假我有几个..不是,Ticket是OrderSend下单动作完成后成交的订单的号码,如果成交正常,则这个号码就是订单号码,如果不正常,则这个号码是-1,作用是方便判断成交是否正常执行了
Ticket1 = OrderSend(Symbol()...
Ticket2 = OrderSend(Symbol()...
这样的话,是不是可以做几次开仓动作了呢?是可以做多个开仓动作,不过开仓动作后一定要检查Ticket的数值是否<0来得到是否正常执行了开仓
(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel,TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0,DodgerBlue)
Symbol() 是当前,OP_BUY 是买开, Lots 下单手数, Slippage允许的滑动点数,StopLossLevel止损点数
,TakeProfitLevel 止赢点数 ,"Buy(#" + MagicNumber + ")" 这里起什么作用呀??什么意思,还有后面三个?是什么意思,起什么作用..."Buy(#" + MagicNumber +"这个参数是订单的一个属性,你可以在下单的时候标记订单这个字段的内容,主要用于自己看着方便识别。
MagicNumber,0, DodgerBlue  Magic是整数字段,也是订单的一个识别字段,一般来讲,同一个EA都要讲自己操作的订单设置相同的Magic,目的是为了防止和其他EA下的单混淆在一起
最后一个参数是颜色参数,他表示这个下单动作的订单在K线图上会使用这里指定的颜色标示。
if(Ticket > 0) // 如果Ticket > 0是真的,就运行下面, Ticket就是上面,开仓的动作是吧??是不是用来分析 开仓成不成功了?
{
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
//OrderSelect函数的作用是锁定一个订单,然后才能查询这个订单的具体内容 ,那(Ticket,SELECT_BY_TICKET, MODE_TRADES)是什么?前面说过要操作一个订单,需要线“选择”上他,才能进行后续操作。这里使用OrderSelect就是这个目的,为了后面使用类似OrderOpenPrice()这样的订单读取函数做准备。至于里面的参数,就是说这个“选择”动作是按Ticket进行选择的,MODE_TRADES表示只在持仓单中选择,不管历史平仓单。
{
Print("BUY order opened : ", OrderOpenPrice()); // Print是输出的意思吧???这里起什么作用呀??作用就是输出,方便在MT4的智能交易标签里查看输出的信息
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Ask, Digits) + " Open Buy");
//是否发出报警邮件 ,是这样呀,那,如果,使用 发送邮件呢,,怎么处理......?????这里是发送邮件的动作,具体发送到哪里去,你要在MT4选项--邮件窗口中设置好接收的邮件地址。
}
 
 

 

 

 
下面,Ticket就是上面,开仓的动作是吧??是不是用来分析开仓成不成功了?
{
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
//OrderSelect
函数的作用是锁定一个订单,然后才能查询这个订单的具体内容 ,(Ticket, SELECT_BY_TICKET,MODE_TRADES)是什么?前面说过要操作一个订单,需要线选择上他,才能进行后续操作。这里使用OrderSelect就是这个目的,为了后面使用类似OrderOpenPrice()这样的订单读取函数做准备。至于里面的参数,就是说这个选择动作是按Ticket进行选择的,MODE_TRADES表示只在持仓单中选择,不管历史平仓单。
{
Print("BUY order opened : ", OrderOpenPrice()); // Print
是输出的意思吧???这里起什么作用呀??作用就是输出,方便在MT4的智能交易标签里查看输出的信息
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Ask, Digits) + " Open Buy");
//
是否发出报警邮件 ,是这样呀,,如果,使用发送邮件呢,,怎么处理......?????这里是发送邮件的动作,具体发送到哪里去,你要在MT4选项--邮件窗口中设置好接收的邮件地址。

 

第126 行 下面我还有点不明白, 请在帮忙指点指点..

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; elseStopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; elseTakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit *Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLossTakeProfit是整数的点数个数需要乘以Point后变成实际的价格差距

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")",MagicNumber, 0, DodgerBlue);
// OrderSend(Symbol() 这个是进行开仓的动作吧? 那 Ticket = OrderSend(Symbol()是起到什么作用呢? 是不是把这个开仓动作传到

Ticket上面来呀... 如果是...? 假我有几个..不是,Ticket是OrderSend下单动作完成后成交的订单的号码,如果成交正常,则这个号码就是订单号码,如果不正常,则这个号码是-1,作用是方便判断成交是否正常执行了
Ticket1 = OrderSend(Symbol()...
Ticket2 = OrderSend(Symbol()...
这样的话,是不是可以做几次开仓动作了呢?是可以做多个开仓动作,不过开仓动作后一定要检查Ticket的数值是否<0来得到是否正常执行了开仓
(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel,TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0,DodgerBlue)
Symbol() 是当前,OP_BUY 是买开, Lots 下单手数, Slippage允许的滑动点数,StopLossLevel止损点数
,TakeProfitLevel 止赢点数 ,"Buy(#" + MagicNumber + ")" 这里起什么作用呀??什么意思,还有后面三个?是什么意思,起什么作用..."Buy(#" + MagicNumber +"这个参数是订单的一个属性,你可以在下单的时候标记订单这个字段的内容,主要用于自己看着方便识别。
MagicNumber,0, DodgerBlue  Magic是整数字段,也是订单的一个识别字段,一般来讲,同一个EA都要讲自己操作的订单设置相同的Magic,目的是为了防止和其他EA下的单混淆在一起
最后一个参数是颜色参数,他表示这个下单动作的订单在K线图上会使用这里指定的颜色标示。
if(Ticket > 0) // 如果Ticket > 0是真的,就运行下面, Ticket就是上面,开仓的动作是吧??是不是用来分析 开仓成不成功了?
{
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
//OrderSelect函数的作用是锁定一个订单,然后才能查询这个订单的具体内容 ,那(Ticket,SELECT_BY_TICKET, MODE_TRADES)是什么?前面说过要操作一个订单,需要线“选择”上他,才能进行后续操作。这里使用OrderSelect就是这个目的,为了后面使用类似OrderOpenPrice()这样的订单读取函数做准备。至于里面的参数,就是说这个“选择”动作是按Ticket进行选择的,MODE_TRADES表示只在持仓单中选择,不管历史平仓单。
{
Print("BUY order opened : ", OrderOpenPrice()); // Print是输出的意思吧???这里起什么作用呀??作用就是输出,方便在MT4的智能交易标签里查看输出的信息
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Ask, Digits) + " Open Buy");
//是否发出报警邮件 ,是这样呀,那,如果,使用 发送邮件呢,,怎么处理......?????这里是发送邮件的动作,具体发送到哪里去,你要在MT4选项--邮件窗口中设置好接收的邮件地址。
}
第126 行 下面我还有点不明白, 请在帮忙指点指点..

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; elseStopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; elseTakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit *Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLossTakeProfit是整数的点数个数需要乘以Point后变成实际的价格差距

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")",MagicNumber, 0, DodgerBlue);
// OrderSend(Symbol() 这个是进行开仓的动作吧? 那 Ticket = OrderSend(Symbol()是起到什么作用呢? 是不是把这个开仓动作传到

Ticket上面来呀... 如果是...? 假我有几个..不是,Ticket是OrderSend下单动作完成后成交的订单的号码,如果成交正常,则这个号码就是订单号码,如果不正常,则这个号码是-1,作用是方便判断成交是否正常执行了
Ticket1 = OrderSend(Symbol()...
Ticket2 = OrderSend(Symbol()...
这样的话,是不是可以做几次开仓动作了呢?是可以做多个开仓动作,不过开仓动作后一定要检查Ticket的数值是否<0来得到是否正常执行了开仓
(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel,TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0,DodgerBlue)
Symbol() 是当前,OP_BUY 是买开, Lots 下单手数, Slippage允许的滑动点数,StopLossLevel止损点数
,TakeProfitLevel 止赢点数 ,"Buy(#" + MagicNumber + ")" 这里起什么作用呀??什么意思,还有后面三个?是什么意思,起什么作用..."Buy(#" + MagicNumber +"这个参数是订单的一个属性,你可以在下单的时候标记订单这个字段的内容,主要用于自己看着方便识别。
MagicNumber,0, DodgerBlue  Magic是整数字段,也是订单的一个识别字段,一般来讲,同一个EA都要讲自己操作的订单设置相同的Magic,目的是为了防止和其他EA下的单混淆在一起
最后一个参数是颜色参数,他表示这个下单动作的订单在K线图上会使用这里指定的颜色标示。
if(Ticket > 0) // 如果Ticket > 0是真的,就运行下面, Ticket就是上面,开仓的动作是吧??是不是用来分析 开仓成不成功了?
{
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
//OrderSelect函数的作用是锁定一个订单,然后才能查询这个订单的具体内容 ,那(Ticket,SELECT_BY_TICKET, MODE_TRADES)是什么?前面说过要操作一个订单,需要线“选择”上他,才能进行后续操作。这里使用OrderSelect就是这个目的,为了后面使用类似OrderOpenPrice()这样的订单读取函数做准备。至于里面的参数,就是说这个“选择”动作是按Ticket进行选择的,MODE_TRADES表示只在持仓单中选择,不管历史平仓单。
{
Print("BUY order opened : ", OrderOpenPrice()); // Print是输出的意思吧???这里起什么作用呀??作用就是输出,方便在MT4的智能交易标签里查看输出的信息
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Ask, Digits) + " Open Buy");
//是否发出报警邮件 ,是这样呀,那,如果,使用 发送邮件呢,,怎么处理......?????这里是发送邮件的动作,具体发送到哪里去,你要在MT4选项--邮件窗口中设置好接收的邮件地址。
}
第126 行 下面我还有点不明白, 请在帮忙指点指点..

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; elseStopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; elseTakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit *Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLossTakeProfit是整数的点数个数需要乘以Point后变成实际的价格差距

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")",MagicNumber, 0, DodgerBlue);
// OrderSend(Symbol() 这个是进行开仓的动作吧? 那 Ticket = OrderSend(Symbol()是起到什么作用呢? 是不是把这个开仓动作传到

Ticket上面来呀... 如果是...? 假我有几个..不是,Ticket是OrderSend下单动作完成后成交的订单的号码,如果成交正常,则这个号码就是订单号码,如果不正常,则这个号码是-1,作用是方便判断成交是否正常执行了
Ticket1 = OrderSend(Symbol()...
Ticket2 = OrderSend(Symbol()...
这样的话,是不是可以做几次开仓动作了呢?是可以做多个开仓动作,不过开仓动作后一定要检查Ticket的数值是否<0来得到是否正常执行了开仓
(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel,TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0,DodgerBlue)
Symbol() 是当前,OP_BUY 是买开, Lots 下单手数, Slippage允许的滑动点数,StopLossLevel止损点数
,TakeProfitLevel 止赢点数 ,"Buy(#" + MagicNumber + ")" 这里起什么作用呀??什么意思,还有后面三个?是什么意思,起什么作用..."Buy(#" + MagicNumber +"这个参数是订单的一个属性,你可以在下单的时候标记订单这个字段的内容,主要用于自己看着方便识别。
MagicNumber,0, DodgerBlue  Magic是整数字段,也是订单的一个识别字段,一般来讲,同一个EA都要讲自己操作的订单设置相同的Magic,目的是为了防止和其他EA下的单混淆在一起
最后一个参数是颜色参数,他表示这个下单动作的订单在K线图上会使用这里指定的颜色标示。
if(Ticket > 0) // 如果Ticket > 0是真的,就运行下面, Ticket就是上面,开仓的动作是吧??是不是用来分析 开仓成不成功了?
{
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
//OrderSelect函数的作用是锁定一个订单,然后才能查询这个订单的具体内容 ,那(Ticket,SELECT_BY_TICKET, MODE_TRADES)是什么?前面说过要操作一个订单,需要线“选择”上他,才能进行后续操作。这里使用OrderSelect就是这个目的,为了后面使用类似OrderOpenPrice()这样的订单读取函数做准备。至于里面的参数,就是说这个“选择”动作是按Ticket进行选择的,MODE_TRADES表示只在持仓单中选择,不管历史平仓单。
{
Print("BUY order opened : ", OrderOpenPrice()); // Print是输出的意思吧???这里起什么作用呀??作用就是输出,方便在MT4的智能交易标签里查看输出的信息
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Ask, Digits) + " Open Buy");
//是否发出报警邮件 ,是这样呀,那,如果,使用 发送邮件呢,,怎么处理......?????这里是发送邮件的动作,具体发送到哪里去,你要在MT4选项--邮件窗口中设置好接收的邮件地址。
}
第126 行 下面我还有点不明白, 请在帮忙指点指点..

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; elseStopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; elseTakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit *Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLossTakeProfit是整数的点数个数需要乘以Point后变成实际的价格差距

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")",MagicNumber, 0, DodgerBlue);
// OrderSend(Symbol() 这个是进行开仓的动作吧? 那 Ticket = OrderSend(Symbol()是起到什么作用呢? 是不是把这个开仓动作传到

Ticket上面来呀... 如果是...? 假我有几个..不是,Ticket是OrderSend下单动作完成后成交的订单的号码,如果成交正常,则这个号码就是订单号码,如果不正常,则这个号码是-1,作用是方便判断成交是否正常执行了
Ticket1 = OrderSend(Symbol()...
Ticket2 = OrderSend(Symbol()...
这样的话,是不是可以做几次开仓动作了呢?是可以做多个开仓动作,不过开仓动作后一定要检查Ticket的数值是否<0来得到是否正常执行了开仓
(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel,TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0,DodgerBlue)
Symbol() 是当前,OP_BUY 是买开, Lots 下单手数, Slippage允许的滑动点数,StopLossLevel止损点数
,TakeProfitLevel 止赢点数 ,"Buy(#" + MagicNumber + ")" 这里起什么作用呀??什么意思,还有后面三个?是什么意思,起什么作用..."Buy(#" + MagicNumber +"这个参数是订单的一个属性,你可以在下单的时候标记订单这个字段的内容,主要用于自己看着方便识别。
MagicNumber,0, DodgerBlue  Magic是整数字段,也是订单的一个识别字段,一般来讲,同一个EA都要讲自己操作的订单设置相同的Magic,目的是为了防止和其他EA下的单混淆在一起
最后一个参数是颜色参数,他表示这个下单动作的订单在K线图上会使用这里指定的颜色标示。
if(Ticket > 0) // 如果Ticket > 0是真的,就运行下面, Ticket就是上面,开仓的动作是吧??是不是用来分析 开仓成不成功了?
{
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
//OrderSelect函数的作用是锁定一个订单,然后才能查询这个订单的具体内容 ,那(Ticket,SELECT_BY_TICKET, MODE_TRADES)是什么?前面说过要操作一个订单,需要线“选择”上他,才能进行后续操作。这里使用OrderSelect就是这个目的,为了后面使用类似OrderOpenPrice()这样的订单读取函数做准备。至于里面的参数,就是说这个“选择”动作是按Ticket进行选择的,MODE_TRADES表示只在持仓单中选择,不管历史平仓单。
{
Print("BUY order opened : ", OrderOpenPrice()); // Print是输出的意思吧???这里起什么作用呀??作用就是输出,方便在MT4的智能交易标签里查看输出的信息
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Ask, Digits) + " Open Buy");
//是否发出报警邮件 ,是这样呀,那,如果,使用 发送邮件呢,,怎么处理......?????这里是发送邮件的动作,具体发送到哪里去,你要在MT4选项--邮件窗口中设置好接收的邮件地址。
}
第126 行 下面我还有点不明白, 请在帮忙指点指点..

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; elseStopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; elseTakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit *Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLossTakeProfit是整数的点数个数需要乘以Point后变成实际的价格差距

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")",MagicNumber, 0, DodgerBlue);
// OrderSend(Symbol() 这个是进行开仓的动作吧? 那 Ticket = OrderSend(Symbol()是起到什么作用呢? 是不是把这个开仓动作传到

Ticket上面来呀... 如果是...? 假我有几个..不是,Ticket是OrderSend下单动作完成后成交的订单的号码,如果成交正常,则这个号码就是订单号码,如果不正常,则这个号码是-1,作用是方便判断成交是否正常执行了
Ticket1 = OrderSend(Symbol()...
Ticket2 = OrderSend(Symbol()...
这样的话,是不是可以做几次开仓动作了呢?是可以做多个开仓动作,不过开仓动作后一定要检查Ticket的数值是否<0来得到是否正常执行了开仓
(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel,TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0,DodgerBlue)
Symbol() 是当前,OP_BUY 是买开, Lots 下单手数, Slippage允许的滑动点数,StopLossLevel止损点数
,TakeProfitLevel 止赢点数 ,"Buy(#" + MagicNumber + ")" 这里起什么作用呀??什么意思,还有后面三个?是什么意思,起什么作用..."Buy(#" + MagicNumber +"这个参数是订单的一个属性,你可以在下单的时候标记订单这个字段的内容,主要用于自己看着方便识别。
MagicNumber,0, DodgerBlue  Magic是整数字段,也是订单的一个识别字段,一般来讲,同一个EA都要讲自己操作的订单设置相同的Magic,目的是为了防止和其他EA下的单混淆在一起
最后一个参数是颜色参数,他表示这个下单动作的订单在K线图上会使用这里指定的颜色标示。
if(Ticket > 0) // 如果Ticket > 0是真的,就运行下面, Ticket就是上面,开仓的动作是吧??是不是用来分析 开仓成不成功了?
{
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
//OrderSelect函数的作用是锁定一个订单,然后才能查询这个订单的具体内容 ,那(Ticket,SELECT_BY_TICKET, MODE_TRADES)是什么?前面说过要操作一个订单,需要线“选择”上他,才能进行后续操作。这里使用OrderSelect就是这个目的,为了后面使用类似OrderOpenPrice()这样的订单读取函数做准备。至于里面的参数,就是说这个“选择”动作是按Ticket进行选择的,MODE_TRADES表示只在持仓单中选择,不管历史平仓单。
{
Print("BUY order opened : ", OrderOpenPrice()); // Print是输出的意思吧???这里起什么作用呀??作用就是输出,方便在MT4的智能交易标签里查看输出的信息
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " +DoubleToStr(Ask, Digits) + " Open Buy");
//是否发出报警邮件 ,是这样呀,那,如果,使用 发送邮件呢,,怎么处理......?????这里是发送邮件的动作,具体发送到哪里去,你要在MT4选项--邮件窗口中设置好接收的邮件地址。
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MQL4关键函数学习
[纯技术] 学习为什么、以及如何设计算法交易系统
海龟交易系统 MT4 源码
一个完整的EA基础构架【源码】
mt4一个综合智能交易系统的经典代码
俚语That's the ticket,跟 “票” 没半毛钱关系!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服