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