MQL4交易策略模块:计算指定区间最高价和最低价,并进行开仓平仓操作
本程序是一个MQL4语言的交易策略模块。主要功能是计算指定区间内的最高价和最低价,并根据设定条件来判断是否开仓或平仓。
程序中使用了一些变量和函数,其中比较重要的有:
- MaxH:指定区间内的最高价;
- MinL:指定区间内的最低价;
- High[]:存储历史K线的最高价数组;
- Low[]:存储历史K线的最低价数组;
- OrdersTotal():获取当前账户中订单的总数;
- OrderSelect():选择某个订单进行操作;
- OrderTicket():获取订单的唯一标识码;
- OrderType():获取订单的类型(买单或卖单);
- OrderLots():获取订单的手数;
- OrderProfit():获取订单的当前盈亏;
- OrderClose():平掉某个订单。
程序的主要流程如下:
首先,将MaxH和MinL初始化为指定区间的最高价和最低价。
然后,进行历史K线的遍历,从左到右,更新MaxH和MinL的值。
接着,判断当前是否有开仓。如果没有,则计算porog和canal的值。porog表示止盈点数,canal表示价格间隔数。
然后,计算Htrend和Ltrend的值,分别表示最高价和最低价的变化量。
最后,遍历所有的订单,判断是否需要平仓。如果订单的当前盈亏超过止盈点数porog,或者符合其他设定条件,则进行平仓操作。同时,更新相关的变量值。
void Block4()//模块4-循环结束后,MaxH和MinL分别表示指定区间内的最高价和最低价。
{
MaxH=High[per];MinL=Low[per];//per=14
for (int m=per; m>=0; m--)//遍历,从左到右
{
if (High[m]>MaxH) MaxH=High[m];//如果当前K线的最高价大于MaxH,则将MaxH更新为当前K线的最高价
if (Low [m]<MinL) MinL=Low [m];//如果当前K线的最低价小于MinL,则将MinL更新为当前K线的最低价。
//计算指定区间最高价和最低价
}
if (b+s==0)//如果买卖单数为0,即没有开单
{
porog=MathRound((0.40*(MaxH-MinL))/Point)*10;//四舍五入
canal=(MaxH-MinL)/Point;//得到点数pip
//在MQL语言中,Point是指最小价格变动单位,通常是小数点后第四位,例如EUR/USD的Point为0.0001。
//将价格除以Point可以得到价格的点数(pip),这是一种常用的计算方式,用于进行技术分析和风险管理。
//例如,如果EUR/USD的当前价格为1.1234,那么将其除以0.0001得到11234点。
}
Htrend=MaxHOld-MaxH;
Ltrend=MinLOld-MinL;
if (b+s>0)//如果有订单
{
for (int x=0; x<OrdersTotal(); x++)//历遍总数
{
OrderSelect(x, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if (OrderType() == OP_SELL) //如果是卖单
{
if (OrderProfit()>porog || (wpr<-85 && wpr > wpr1 && OrderProfit()>0) || (DayOfWeek()==mweek && mhour==Hour()))
{
OrderClose(OrderTicket(),OrderLots(),Ask,slip,White);
s--;
ssig=0;
}
}
if (OrderType() == OP_BUY)
{
if (OrderProfit()>porog ||
(wpr>-15 && wpr < wpr1 && OrderProfit()>0) ||
(DayOfWeek()==mweek && mhour==Hour()))
{
OrderClose(OrderTicket(),OrderLots(),Bid,slip,White);
b--;
bsig=0;
}
}
} //
} // for
} // if
} // void function
原文地址: https://www.cveoy.top/t/topic/ohda 著作权归作者所有。请勿转载和采集!