注册模拟号
https://myvip.avatrade.cn/
策略要求
监控一分钟k线,如果连续两根阳线,就 做多 设置 10 个点差值的 止盈跟 止损
新建ea模板 first1
代码如下
//+------------------------------------------------------------------+
//| first1.mq4 |
//| Copyright 2021, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, jiegemena."
#property link "https://blog.csdn.net/jiegemena"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
//--- input parameters
input int RedKNums = 2; // 连续几根阳线
input double ClearLoss = 10; // 止损点位
input double ClearProfit = 10; // 止盈点位
int OId = 0;
string sign1 = "order1";
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- 每个交易数据回调
DealWork();
}
//+------------------------------------------------------------------+
// 检测
void DealWork()
{
if(!CheckPosition1(OId))
{
Print("没有持仓");
int max0 = 0;
for(int i=0; i<RedKNums; i++)
{
if(GetKGreen(i + 1))
{
max0++;
}
}
if(max0 == RedKNums)
{
Print("符合条件买入");
Buy();
Sleep(60 * 1000);
}
}
else
{
Print("有持仓");
}
}
// 检查 前 i 分钟 是否阳线
bool GetKGreen(int i)
{
double k = GetKPoint(i);
if(k > 0)
{
Print("k 大",k,":", Time[i]);
return true;
}
Print("k 小",k,":", Time[i]);
return false;
}
// 前 i 分钟的 k线 差值
double GetKPoint(int i)
{
return Close[i] - Open[i];
}
// 做多
void Buy()
{
double BuyPri = Ask;
double stoploss = BuyPri - ClearLoss*Point;
double takeprofit = BuyPri + ClearProfit*Point;
Print("购买");
Print("当前:", BuyPri);
Print("stoploss:", stoploss);
Print("takeprofit:", takeprofit);
OId = OrderSend(Symbol(),OP_BUY,1,BuyPri,3,stoploss,takeprofit,sign1,1314168,0,clrGreen);
if(OId<0)
{
Print(" 交易失败 OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully:", OId);
}
// 做空
void Sell1()
{
double SellPri = Bid;
double stoploss = SellPri + ClearProfit*Point;
double takeprofit = SellPri - ClearLoss*Point;
Print("购买");
Print("当前:", SellPri);
Print("stoploss:", stoploss);
Print("takeprofit:", takeprofit);
OId = OrderSend(Symbol(),OP_SELL,1,SellPri,3,stoploss,takeprofit,sign1,1314168,0,clrGreen);
if(OId<0)
{
Print("OrderSend failed with error #",GetLastError());
}
else
Print("OrderSend placed successfully:", OId);
}
// 笨方法检测持仓
bool CheckPosition1(int oid)
{
string comment;
// 单号是否存在
if(OrderSelect(oid,SELECT_BY_TICKET)==false)
{
Print("OrderSelect failed error code is",GetLastError());
return false;
}
comment = OrderComment();
if(comment == sign1)
{
return true;
}
return false;
}
//+------------------------------------------------------------------+
点击编写
回到交易软件,把first1 拖到行情窗口,设置一分钟图
观察图标是否正常
只要有价格跳动,观察日志,已经在正常运行
程序符合条件
正常设置了 10 个点的止盈止损