extern double TakeProfit = 10;
extern double Lots = 0.1;
extern double TrailingStop = 0;
extern double StopLoss = 15;
extern double MM = 0;
extern double Risk = 30;
extern double LotLimit = 50;
extern double Per = 3;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
  
  
double s=GlobalVariableGet('SELLLIMIT');//全局范围内获取SELLLIMIT
double b=GlobalVariableGet('BUYLIMIT');
double ds=GlobalVariableGet('DateS');
double db=GlobalVariableGet('DateB');

if (ds != DayOfWeek())//如果DS当天的星期几不相同为了避免在下一个交易日使用旧的限价单值而编写的
{
GlobalVariableDel('SELLLIMIT');
GlobalVariableDel('BUYLIMIT');
GlobalVariableDel('DatesS');
GlobalVariableDel('DatesB');
}


 double H3,H4,L3,L4,SH4,SH3,BL3,BL4;
 //当订单总数小于1且当前时间是23:59时,该代码段会执行后续操作
 if ( OrdersTotal() < 1 && Hour() == 23 && Minute() == 59 ) return(0);
 //到当前时间时,有订单的话
 if ( OrdersTotal() > 0 && Hour() == 23 && Minute() == 59 )
  {
   //以下可以覆盖全部各类型订单
   int total = OrdersTotal();
   for(int i=total-1;i>=0;i--)
   {
      OrderSelect(i, SELECT_BY_POS);
      int type   = OrderType();

      bool result = false;
    
      switch(type)
      {
      //Close opened long positions
       case OP_BUY  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
                          break;
      
      //Close opened short positions
      case OP_SELL  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
                          break;

      //Close pending orders
      case OP_BUYLIMIT  :
      case OP_BUYSTOP   :
      case OP_SELLLIMIT :
      case OP_SELLSTOP  : result = OrderDelete( OrderTicket() );
    }
    
    if(result == false)
    {
      Alert('Order ' , OrderTicket() , ' failed to close. Error:' , GetLastError() );
      Sleep(3000);
    }  
  }
  }
 
 H4= ((((High[1]-Low[1])*1.1)/2)+Close[1]);
 H3= ((((High[1]-Low[1])*1.1)/4)+Close[1]);
 
 L3= (Close[1]-((High[1]-Low[1])*1.1)/4);
 L4= (Close[1]-((High[1]-Low[1])*1.1)/2);


if (db != DayOfWeek() && s == 0) 
{


SH3 = OrderSend(Symbol(),OP_SELLLIMIT,Lots,NormalizeDouble(H4,4),3,NormalizeDouble(H4,4)+StopLoss*Point,NormalizeDouble(H4,4)-TakeProfit*Point,'H3',0,0,Red);
if (SH3 < 0){
          GlobalVariableSet('SELLLIMIT',0);
          
          }
        else 
          {
          GlobalVariableSet('SELLLIMIT',1);
          GlobalVariableSet('DateS',DayOfWeek());   
          
           }
           }
           

//SH4 = OrderSend(Symbol(),OP_SELLLIMIT,Lots,H4,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,'H4',0,0,Red);           
                      
           


if (db != DayOfWeek() && b == 0) {
BL3 = OrderSend(Symbol(),OP_BUYLIMIT,Lots,NormalizeDouble(L4,4),3,NormalizeDouble(L4,4)-StopLoss*Point,NormalizeDouble(L4,4)+TakeProfit*Point,'L3',0,0,Green);  
if (BL3 < 0){
          GlobalVariableSet('BUYLIMIT',0);
          
          }
        else 
          {
          GlobalVariableSet('BUYLIMIT',1);
          GlobalVariableSet('DateB',DayOfWeek());   
          
           }
           }
           
//BL4 = OrderSend(Symbol(),OP_BUYLIMIT,Lots,L4,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,'L4',0,0,Green);    

}



详细解析上述代码内容:该代码是一个简单的外汇交易策略,采用的是基于价格波动的趋势跟踪策略。下面是对代码的详细解析:

1. extern变量

该代码中定义了几个外部变量,包括TakeProfit、Lots、TrailingStop、StopLoss、MM、Risk、LotLimit和Per。这些变量可以在外部进行设置,以便更好地控制交易策略的参数。

2. 全局变量

该代码中使用了全局变量来保存SELLLIMIT、BUYLIMIT、DateS和DateB等变量。全局变量在程序执行过程中始终存在,可以在不同的函数之间共享数据。

3. start()函数

start()函数是外汇交易策略中最重要的函数之一,它是一个专门用于交易的函数,包含了交易逻辑。该函数中首先获取全局变量SELLLIMIT、BUYLIMIT、DateS和DateB等变量的值,然后根据当前时间和订单状态来决定是否需要关闭订单或删除挂单。接下来,根据价格波动计算出H3、H4、L3和L4等价位,并根据当前时间和订单状态来决定是否需要开仓或挂单。

4. OrderSelect()函数

OrderSelect()函数用于选择指定位置的订单,并将其设置为当前订单。在该代码中,使用循环语句遍历所有的订单,并对每个订单进行操作。

5. OrderClose()函数

OrderClose()函数用于关闭指定的订单。在该代码中,当时间到达23:59时,需要关闭所有已经开仓的订单。

6. OrderDelete()函数

OrderDelete()函数用于删除指定的挂单。在该代码中,当时间到达23:59时,需要删除所有的挂单。

7. OrderSend()函数

OrderSend()函数用于发送交易指令。在该代码中,使用OrderSend()函数来下达开仓和挂单指令。该函数的参数包括交易品种、交易方向、交易量、价格、止损和止盈等信息。

8. NormalizeDouble()函数

NormalizeDouble()函数用于将浮点数规范化。在该代码中,使用该函数规范化H4、L3和L4等价位,以保证交易指令的正确性。

9. 总结

该代码是一个简单的外汇交易策略,采用的是基于价格波动的趋势跟踪策略。通过全局变量、OrderSelect()函数、OrderClose()函数、OrderDelete()函数和OrderSend()函数等来实现交易策略的逻辑。
基于价格波动趋势跟踪的外汇交易策略代码解析

原文地址: https://www.cveoy.top/t/topic/nVnw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录