一、我写了一段代码
我写了一段代码。这是一句多么简单的话,“我写了一段代码”,就这么简单。没写过代码的人可能,只是有可能看不出这其中的奥妙,代码专业的人可能也是觉得无所钓位。但是我还是要说,因为这不仅仅是说我写了一段代码,虽然也只能说我写了一段代码。
二、我写了一段什么样的代码
那么我倒底写了一段什么样的代码,我写了这样一段代码,诸君请看:
double
ask,
bid,
平仓量,
最近支撑价格,
最近阻力价格,
现有多单总数,
现有空单总数,
多单的持仓量,
空单的持仓量,
多单开仓价格,
空单开仓价格,
多单止损价格,
空单止损价格;
input double
交易量=3.0,
盈亏比=5.0,
点差=0.00030;
input string
币种="EURUSD";
//+--Expert tick function--+
void OnTick()
{
name1();
/*
//---打印“现有多单总数”
Print("现有多单总数=",现有多单总数);
//---打印“多单开仓价格”
Print("多单开仓价格=",多单开仓价格);
//---打印“多单止损价格”
Print("多单止损价格=",多单止损价格);
//---打印“最近阻力价格”
Print("最近阻力价格=",最近阻力价格);
//---打印“最近支撑价格”
Print("最近支撑价格=",最近支撑价格);
//---打印“当前ask价格”
Print("ask=",ask);
//---打印“当前bid价格”
Print("bid=",bid);*/
ask=SymbolInfoDouble(币种,SYMBOL_ASK);
bid=SymbolInfoDouble(币种,SYMBOL_BID);
{if((最近支撑价格>0)&&(最近阻力价格>0)
&&(现有多单总数==0)
&&(bid>(最近阻力价格+点差)))
{name4();}
}
{if(((bid-多单开仓价格)>(多单开仓价格-多单止损价格))
&&(多单的持仓量==3))
{平仓量=1.5;name3();}
}
{if(((bid-多单开仓价格)>2*(多单开仓价格-多单止损价格))
&&(多单的持仓量==1.5))
{平仓量=1.0;name3();}
}
}
//+--Expert name4 function--+
void name4()
{
//---开仓
MqlTradeRequest request= {};
MqlTradeResult result= {};
//---请求结构体
request.action=TRADE_ACTION_DEAL;
request.price=ask;
request.symbol=币种;
request.type=ORDER_TYPE_BUY;
request.volume=交易量;
request.sl=最近支撑价格-点差;
request.tp=request.price+(盈亏比*(request.price-request.sl));
request.deviation=5;
request.magic=2;
if(OrderSend(request,result))
{
Print("开多单成功");
}
}
//+--Expert name3 function--+
void name3()
{
//---遍历持仓
for(int i=0;i<PositionsTotal();i++)
{
//---获取订单
ulong pos_ticket=PositionGetTicket(i);
ulong pos_magic=PositionGetInteger(POSITION_MAGIC);
string pos_symbol=PositionGetSymbol(i);
double pos_volume=PositionGetDouble(POSITION_VOLUME);
ENUM_POSITION_TYPE pos_type
=(ENUM_POSITION_TYPE)
PositionGetInteger(POSITION_TYPE);//?????????????ENUM
//---平仓
MqlTradeRequest request= {};
MqlTradeResult result= {};
bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//---请求结构体
request.action=TRADE_ACTION_DEAL;
request.position=pos_ticket;
request.symbol=pos_symbol;
request.volume=平仓量;
request.magic=pos_magic;
//---指定品种条件
if(pos_symbol==币种)
{if(pos_type==POSITION_TYPE_BUY)
{request.type=ORDER_TYPE_SELL;
request.price=bid;}
//---确定发送请求
if(OrderSend(request,result))
{Print("平仓返回指令=","平多单成功");}
}
}
}
//+--Expert name1 function--+
void name1()
{
//---初始化,否则持续累加
现有多单总数=0;
现有空单总数=0;
//---获取最近阻力价格
for(int x=2;iHighest(币种,0,MODE_HIGH,x,1)
!=iHighest(币种,0,MODE_HIGH,x-1,1);x++)//遍历K线 x=2
最近阻力价格=iHigh(币种,PERIOD_CURRENT,x);//关键阻力位置 趋势相对高点
//---获取最近支撑价格
for(int y=2;iLowest(币种,0,MODE_LOW,y,1)
!=iLowest(币种,0,MODE_LOW,y-1,1);y++)//遍历K线 y=2
最近支撑价格=iLow(币种,PERIOD_CURRENT,y);//关键支撑位置 趋势相对低点
//---遍历当前所有持仓,否则只计算个别订单
for(int m=0;m<PositionsTotal();m++)
{
//---获取所有订单
if(PositionGetTicket(m)>0)
//---获取多单
{if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)//订单类型==多单
//---计算订单
{现有多单总数++;//遍历累加所有多单
多单开仓价格=PositionGetDouble(POSITION_PRICE_OPEN);
多单止损价格=PositionGetDouble(POSITION_SL);
多单的持仓量=PositionGetDouble(POSITION_VOLUME);}
//---获取空单
{if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)//订单类型==空单
//---计算订单
{现有空单总数++;//遍历累加所有空单
空单开仓价格=PositionGetDouble(POSITION_PRICE_OPEN);
空单止损价格=PositionGetDouble(POSITION_SL);
空单的持仓量=PositionGetDouble(POSITION_VOLUME);}
}
}
}
}
我以为我会洋洋洒洒,前呼后应,前世今生,前因后果的写个五百万来字。原来因为知识有限,资源有限,能力有限,格局有限,成果有限,经历有限,资历有限。
就写这么点儿... ...