目視就發現很多問題了
1/.金叉死叉應該是 MA80,K1< MA320,K1 && MA80,K0> MA320,K0 需要兩根以上K線作判斷 只用K0做判斷你會產生很多個交易信號
2/.
1/.金叉死叉應該是 MA80,K1< MA320,K1 && MA80,K0> MA320,K0 需要兩根以上K線作判斷 只用K0做判斷你會產生很多個交易信號
2/.
void CloseTrade() {
for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)
應該使用持倉的部分OrdersTotal() ,OrderSelect(i, SELECT_BY_POS ,MODE_TRADE)
使用 History使過濾已經平倉的部分
3/. ManageRisk()邏輯錯誤
您好。
AI生成的文档在英文论坛和其他语种的论坛一般是会被下架的,因为提问者大多不擅长编程,沟通中会产生误解。
可以在自由职业者招募。
既然已经有大神给您回复了,暂且保留。
另外例行提醒一下。
【如何防止机器人误判】讨论代码时请使用代码表述功能
【如何防止机器人误判】讨论代码时请使用代码表述功能
- 2023.06.13
- www.mql5.com
大家好,我是官网版主。 官网内部有机器人辅助管理,目的是自动下架一些有误导性的内容。 内容过长,或同一个IP多次注册,容易导致机器人误判,而被无辜删帖。 如果您被无故删帖,我们对这种体验感到万分抱歉。 为了防止机器人误判,请在讨论代码的时候使用代码表述功能。(如图) 感谢您的配合...
建立一个mt4软件根据均线智能开仓平仓ea程序,生成.ex4文件 在15分钟周期图表,MA80金叉MA320做多,死叉平仓。
在15分钟周期图表,MA80死叉MA320做空,金叉平仓。
固定开仓0.1手,单品种盈利1美金加仓1次0.1,单品种盈利3美金加仓0.2,合计加仓0.3 在15分钟图表显示交易成交轨迹线路
这个思路可以做出ea吗?
代码这样,还需要怎么修正,请教汇友们
//+------------------------------------------------------------------+
//| YourEA.mq4 |
//| Generated by Bing AI |
//+------------------------------------------------------------------+
#property strict
// 输入参数
input int ma80_period = 80;
input int ma320_period = 320;
input double lotSize = 0.1; // 初始手数
input double profitTarget1 = 1; // 盈利目标1(美元)
input double profitTarget2 = 3; // 盈利目标2(美元)
// 全局变量
int crossOver = 0; // 金叉标志
int crossUnder = 0; // 死叉标志
double totalProfit = 0; // 总盈利
//+------------------------------------------------------------------+
//| 专门用于检测均线交叉的函数 |
//+------------------------------------------------------------------+
void CheckCrossOver() {
if (iMA(NULL, 15, ma80_period, 0, MODE_SMA, PRICE_CLOSE, 0) > iMA(NULL, 15, ma320_period, 0, MODE_SMA, PRICE_CLOSE, 0)) {
crossOver = 1;
crossUnder = 0;
} else {
crossOver = 0;
}
}
void CheckCrossUnder() {
if (iMA(NULL, 15, ma80_period, 0, MODE_SMA, PRICE_CLOSE, 0) < iMA(NULL, 15, ma320_period, 0, MODE_SMA, PRICE_CLOSE, 0)) {
crossUnder = 1;
crossOver = 0;
} else {
crossUnder = 0;
}
}
//+------------------------------------------------------------------+
//| 专门用于执行交易的函数 |
//+------------------------------------------------------------------+
void ExecuteTrade(int type, double lotSize) {
if (type == OP_BUY) {
// 执行做多操作
OrderSend(Symbol(), OP_BUY, lotSize, Ask, 3, 0, 0, "Buy Order", 0, 0, Green);
} else if (type == OP_SELL) {
// 执行做空操作
OrderSend(Symbol(), OP_SELL, lotSize, Bid, 3, 0, 0, "Sell Order", 0, 0, Red);
}
}
//+------------------------------------------------------------------+
//| 专门用于平仓的函数 |
//+------------------------------------------------------------------+
void CloseTrade() {
for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderSymbol() == Symbol()) {
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 3, White);
}
}
}
//+------------------------------------------------------------------+
//| 专门用于资金管理和加仓的函数 |
//+------------------------------------------------------------------+
void ManageRisk() {
double profit = AccountBalance() - AccountEquity();
if (profit >= profitTarget1 && totalProfit < profitTarget1) {
// 达到盈利目标1,加仓0.1手
totalProfit = profitTarget1;
lotSize += 0.1;
} else if (profit >= profitTarget2 && totalProfit < profitTarget2) {
// 达到盈利目标2,加仓0.2手
totalProfit = profitTarget2;
lotSize += 0.2;
}
}
//+------------------------------------------------------------------+
//| EA 初始化函数 |
//+------------------------------------------------------------------+
int OnInit() {
// 在这里执行初始化操作,如果有的话
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| EA 主循环函数 |
//+------------------------------------------------------------------+
void OnTick() {
// 在这里执行每次价格变动时的操作
CheckCrossOver();
CheckCrossUnder();
// 在这里添加开仓、平仓、资金管理等逻辑
if (crossOver == 1) {
// 金叉,执行做多操作
ExecuteTrade(OP_BUY, lotSize);
} else if (crossUnder == 1) {
// 死叉,执行做空操作
ExecuteTrade(OP_SELL, lotSize);
} else {
// 无交叉,平仓
CloseTrade();
}
// 执行资金管理和加仓逻辑
ManageRisk();
}