lyp1118017 发表于 2022-4-22 14:03:43

新人求教,请大佬帮着看下代码,万分感谢

新人小白一枚,写了个测试代码,希望效果是:0.01手起步,如果亏损,下根K线开盘时平仓并反向2倍开仓,如果盈利,下根K线开盘时平仓并仍以0.01手开仓。但代码写出后试运行,发现不是平仓后不开仓,要不就是一次开两个0.01仓,请大佬帮忙看下代码,不胜感谢!!

#property copyright "【全部】"

//设置全局变量

extern double 默认手数 = 0.01;
extern int 倍数 = 2;
extern int 首次运行 = 0;
extern int 滑点 = 1000000;


extern double 上单单号;
extern double 上单手数;
extern double 上单方向;
extern double 序号;
extern int 总单数;
extern double 下单手数;
extern int 总订单数;

extern int 选择;
extern bool 平仓;
extern int 开仓;

datetime 下注一次 = 0;



//程序开始


void OnTick()
{

if(首次运行 == 0)
{
开仓 = OrderSend(Symbol(),OP_BUY,默认手数,Ask,滑点,0,0,"买入开仓",123,0,Red);
首次运行 = 1;
下注一次 = Time;
}

if(下注一次 != Time)//【1】下一个柱子开仓
{
   总订单数 = OrdersTotal();
   if(总订单数 > 0)//【2-1】单数大于0
   {
      序号 = 0;
      for(总单数 = 1;总单数 <= 总订单数;总单数 ++)//【3】查找本货币对
      {
      选择 = OrderSelect(序号,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol() == Symbol())//【4】货币对吻合
         {
         上单单号 = OrderTicket();
         上单手数 = OrderLots();
         上单方向 = OrderType();
            if(上单方向 == OP_BUY)//【5-1】多
            {
               if(Close > Open)//【6-1】盈利
               {
                  if(上单手数 > 默认手数)//【7】手数大于默认手数
                  {
                  平仓 = OrderClose(上单单号,上单手数,Bid,滑点,Green);
                  开仓 = OrderSend(Symbol(),OP_BUY,默认手数,Ask,滑点,0,0,"买入开仓",123,0,Red);
                  }//【7】结束
               }//【6-1】结束
               else//【6-2】亏损
               {
               平仓 = OrderClose(上单单号,上单手数,Bid,滑点,Green);
               下单手数 = 上单手数 * 倍数;
               开仓 = OrderSend(Symbol(),OP_SELL,下单手数,Bid,滑点,0,0,"卖出开仓",123,0,Green);
               }//【6-2】结束
            }//【5-1】结束
            if(上单方向 == OP_SELL)//【5-2】空
            {
               if(Close < Open)//【7-1】盈利
               {
                  if(上单手数 > 默认手数)//【8】手数大于默认手数
                  {
                  平仓 = OrderClose(上单单号,上单手数,Ask,滑点,Red);
                  开仓 = OrderSend(Symbol(),OP_SELL,默认手数,Bid,滑点,0,0,"卖出开仓",123,0,Green);
                  }//【8】结束
               }//【7-1】结束
               else//【7-2】亏损
               {
               平仓 = OrderClose(上单单号,上单手数,Ask,滑点,Red);
               下单手数 = 上单手数 * 倍数;
               开仓 = OrderSend(Symbol(),OP_BUY,下单手数,Ask,滑点,0,0,"买入开仓",123,0,Red);
               }//【7-2】结束
             }//【5-2】结束
         }//【4】结束
      序号 = 序号 + 1;
      }//【3】结束
   }//【2-1】结束
下注一次 = Time;
}//【1】结束
}


情无似归 发表于 2022-4-23 07:06:19

滑点值太大

lyp1118017 发表于 2022-4-23 19:59:35

我把滑点改到100也不行,问题依旧{:1_175:}

hulaijin001 发表于 2022-5-12 11:27:27

不要用TIME去控制开关单,用订单数量去控制。比如在1分钟图中Time的值,59秒之内的结果都是一样的。
页: [1]
查看完整版本: 新人求教,请大佬帮着看下代码,万分感谢