3评论

0收藏

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

avatar lyp1118017 | 887 人阅读 | 3 人评论 | 2022-04-22

新人小白一枚,写了个测试代码,希望效果是: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[0];
}

if(下注一次 != Time[0])//【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[1] > Open[1])//【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[1] < Open[1])//【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[0];
}//【1】结束
}


""
还没有人打赏,支持一下

评论|共 3 个

情无似归

发表于 2022-4-23 07:06:19 来自手机 | 显示全部楼层

滑点值太大

lyp1118017

发表于 2022-4-23 19:59:35 | 显示全部楼层

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

hulaijin001

发表于 2022-5-12 11:27:27 | 显示全部楼层

不要用TIME[0]去控制开关单,用订单数量去控制。比如在1分钟图中Time[0]的值,59秒之内的结果都是一样的。

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则