//+------------------------------------------------------------------+
//| SAR_EA.mq4 |
//| Copyright 2023, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
// 输入参数
input int STEP = 2; // SAR步长
input int MVALUE = 20; // SAR最大值
input int N = 4; // SAR周期
input double LotSize = 0.1; // 交易手数
// 全局变量
double STEP1, MVALUE1;
double sarValue;
int lastSignal = 0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
STEP1 = STEP / 100.0;
MVALUE1 = MVALUE / 100.0;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// 计算SAR值
sarValue = iSAR(NULL, 0, STEP1, MVALUE1, 0);
// 计算其他指标
CalculateIndicators();
// 交易逻辑
TradingLogic();
}
//+------------------------------------------------------------------+
//| 计算指标函数 |
//+------------------------------------------------------------------+
void CalculateIndicators()
{
// 这里需要实现所有指标计算逻辑
// 包括V1, V2, V3, V5, MA1, MA2等
// 由于代码较长,需要逐步实现每个指标
}
//+------------------------------------------------------------------+
//| 交易逻辑函数 |
//+------------------------------------------------------------------+
void TradingLogic()
{
// 买入信号 (MIM1-MIM5条件)
if(CheckBuySignal() && lastSignal != 1)
{
CloseAllSells();
OpenBuy();
lastSignal = 1;
}
// 卖出信号 (KKKL等条件)
else if(CheckSellSignal() && lastSignal != -1)
{
CloseAllBuys();
OpenSell();
lastSignal = -1;
}
}
//+------------------------------------------------------------------+
//| 检查买入信号函数 |
//+------------------------------------------------------------------+
bool CheckBuySignal()
{
// 实现所有买入条件判断
// MIM1 OR MIM2 OR MIM3 OR MIM4 OR MIM5
return false; // 暂时返回false
}
//+------------------------------------------------------------------+
//| 检查卖出信号函数 |
//+------------------------------------------------------------------+
bool CheckSellSignal()
{
// 实现所有卖出条件判断
// KKKL OR KKG12 OR CROSS(40,KKG9)
return false; // 暂时返回false
}
//+------------------------------------------------------------------+
//| 开买入单函数 |
//+------------------------------------------------------------------+
void OpenBuy()
{
OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, 0, 0, "SAR Buy", 0, 0, Green);
}
//+------------------------------------------------------------------+
//| 开卖出单函数 |
//+------------------------------------------------------------------+
void OpenSell()
{
OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, 0, 0, "SAR Sell", 0, 0, Red);
}
//+------------------------------------------------------------------+
//| 关闭所有买入单函数 |
//+------------------------------------------------------------------+
void CloseAllBuys()
{
for(int i = OrdersTotal()-1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderType() == OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, White);
}
}
}
}
//+------------------------------------------------------------------+
//| 关闭所有卖出单函数 |
//+------------------------------------------------------------------+
void CloseAllSells()
{
for(int i = OrdersTotal()-1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderType() == OP_SELL)
{
OrderClose(OrderTicket(), OrderLots(), Ask, 3, White);
}
}
}
}
|