分享

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

 li0k 2014-03-06

新手:一个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)    //  如果已经开有买单,这里是这个意思吗?
{

            //+------------------------------------------------------------------+
            //| Signal Begin(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;
                  }
               }
            }

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

//+------------------------------------------------------------------+
   //| Signal Begin(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;


   //+------------------------------------------------------------------+
   //| Signal End                                                       |
   //+------------------------------------------------------------------+

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

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

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

         if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;  //这里是什么意思??
         if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 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("BUY order opened : ", OrderOpenPrice());  // Print 是输出的意思吧??? 这里起什么作用呀??

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

                        }
else
{
                                Print("Error opening 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; else StopLossLevel = 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; else StopLossLevel = 0.0;
//如果 使用止损   StopLossLevel =   买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 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; else StopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit * Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLoss TakeProfit是整数的点数个数需要乘以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; else StopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit * Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLoss TakeProfit是整数的点数个数需要乘以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; else StopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit * Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLoss TakeProfit是整数的点数个数需要乘以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; else StopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit * Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLoss TakeProfit是整数的点数个数需要乘以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; else StopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit * Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLoss TakeProfit是整数的点数个数需要乘以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; else StopLossLevel = 0.0;
//如果 使用止损 StopLossLevel = 买入价-止损点数* Point

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
//如果使用止赢 TakeProfitLevel=买入价+止赢点数* Point
// 上面两句我看了看,是不是这个意思.. 我想问??? 为什么是 StopLoss * Point或者 TakeProfit * Point 直接 用 StopLoss或者 TakeProfit 不行吗? ? StopLoss TakeProfit是整数的点数个数需要乘以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选项--邮件窗口中设置好接收的邮件地址。
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多