希望祠.同舟.量化.侦云取势势能研究中心

 找回密码
 立即注册

《周易.系辞》

君子藏器于身,待时而动!

《吕氏.春秋》

君子谋时而动,顺势而为!

《晏子·霸业因时而生》

识时务者为俊杰,通机变者为英豪!

《周易.系辞》

天之所助,吉无不利,天之所助者.顺天者也!

《史记.太史公自序》
天之势,浩浩汤汤,顺之者昌,逆之者亡!

《寒窑赋》

天不得时,日月无光.地 不得时,草木不长.

《周易.系辞》

刚柔者,立本者也!变通者,识时者也!

圣人云:

君子务本,本立而道生!

 《势胜学》

不知势,无以为人也.势易而未觉,必败焉!

《周易·系辞上传》:

富有之谓大业,日新之谓盛德!

《礼记.大学》:
格物致知,正心诚意,修身齐家!

《礼记.中庸》:

凡事预则立,不预则废!

查看: 1355|回复: 0

[实力见证奇迹] 这个指标叫rainbowmma.ex5

[复制链接]

1653

主题

1887

帖子

1万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
11906

最佳新人活跃会员热心会员推广达人宣传达人荣誉版主勋章理事

QQ
侦云取势 发表于 2025-4-12 20:38:38 | 显示全部楼层 |阅读模式
这个指标叫rainbowmma.ex5 写成mt5ea

这个指标的参数用来过滤:1-13黄色;14-26蓝色;27-39白色;40到53绿色;53到66粉色,

多头:当灰色在蓝色在黄色上,粉色线呈现多头状态时开多单

空头 :当灰色在蓝色在黄色下,粉色线呈现空头状态时开空单

出场:盈利6000清仓 亏损5000清仓



//+------------------------------------------------------------------+
//|                                                   RainbowMMA_EA.mq5 |
//|                                      Copyright 2023, EarnForex.com |
//|                                        https://www.earnforex.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, EarnForex.com"
#property link      "https://www.earnforex.com/"
#property version   "1.00"

// 输入参数
input double LotSize = 0.1;          // 交易手数
input int    TakeProfit = 6000;      // 止盈点数
input int    StopLoss = 5000;        // 止损点数
input int    MagicNumber = 12345;    // 魔术码

// 指标句柄
int rainbowHandle;
// 定义颜色组范围
#define YELLOW_START 0
#define YELLOW_END 12
#define BLUE_START 13
#define BLUE_END 25
#define GRAY_START 26
#define GRAY_END 38
#define GREEN_START 39
#define GREEN_END 52
#define PINK_START 53
#define PINK_END 65

//+------------------------------------------------------------------+
//| 初始化函数                                                       |
//+------------------------------------------------------------------+
int OnInit()
{
   rainbowHandle = iCustom(_Symbol, _Period, "RainbowMMA");
   if(rainbowHandle == INVALID_HANDLE)
   {
      Print("无法加载RainbowMMA指标!");
      return(INIT_FAILED);
   }
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| 判断MA组排列方向函数                                             |
//+------------------------------------------------------------------+
bool IsGroupBullish(int startIdx, int endIdx)
{
   for(int i = startIdx; i < endIdx; i++)
   {
      double maCurrent = GetMAValue(i);
      double maNext = GetMAValue(i+1);
      if(maCurrent < maNext) return false;
   }
   return true;
}

bool IsGroupBearish(int startIdx, int endIdx)
{
   for(int i = startIdx; i < endIdx; i++)
   {
      double maCurrent = GetMAValue(i);
      double maNext = GetMAValue(i+1);
      if(maCurrent > maNext) return false;
   }
   return true;
}

//+------------------------------------------------------------------+
//| 获取MA值函数                                                     |
//+------------------------------------------------------------------+
double GetMAValue(int index)
{
   double buf[];
   ArraySetAsSeries(buf, true);
   if(CopyBuffer(rainbowHandle, index, 0, 3, buf) < 3) return 0;
   return buf[0];
}

//+------------------------------------------------------------------+
//| 交易执行函数                                                     |
//+------------------------------------------------------------------+
void CheckForSignal()
{
   // 获取各组的排列状态
   bool grayAboveBlue = GetMAValue(GRAY_START) > GetMAValue(BLUE_START);
   bool blueAboveYellow = GetMAValue(BLUE_START) > GetMAValue(YELLOW_START);
   bool pinkBullish = IsGroupBullish(PINK_START, PINK_END);

   bool grayBelowBlue = GetMAValue(GRAY_START) < GetMAValue(BLUE_START);
   bool blueBelowYellow = GetMAValue(BLUE_START) < GetMAValue(YELLOW_START);
   bool pinkBearish = IsGroupBearish(PINK_START, PINK_END);

   // 多头条件
   if(grayAboveBlue && blueAboveYellow && pinkBullish)
   {
      OpenTrade(ORDER_TYPE_BUY);
   }
   // 空头条件
   else if(grayBelowBlue && blueBelowYellow && pinkBearish)
   {
      OpenTrade(ORDER_TYPE_SELL);
   }
}

//+------------------------------------------------------------------+
//| 开仓函数                                                         |
//+------------------------------------------------------------------+
void OpenTrade(ENUM_ORDER_TYPE orderType)
{
   if(PositionsTotal() > 0) return;

   MqlTradeRequest request = {};
   MqlTradeResult result = {};
   request.action = TRADE_ACTION_DEAL;
   request.symbol = _Symbol;
   request.volume = LotSize;
   request.type = orderType;
   request.magic = MagicNumber;
   request.price = orderType == ORDER_TYPE_BUY ? SymbolInfoDouble(_Symbol, SYMBOL_ASK) : SymbolInfoDouble(_Symbol, SYMBOL_BID);

   // 设置止盈止损
   if(TakeProfit > 0)
      request.tp = orderType == ORDER_TYPE_BUY ? request.price + TakeProfit * _Point : request.price - TakeProfit * _Point;
   if(StopLoss > 0)
      request.sl = orderType == ORDER_TYPE_BUY ? request.price - StopLoss * _Point : request.price + StopLoss * _Point;

   if(!OrderSend(request, result))
      Print("开仓失败,错误代码:", GetLastError());
}

//+------------------------------------------------------------------+
//| 平仓函数                                                         |
//+------------------------------------------------------------------+
void CloseAllTrades()
{
   for(int i = PositionsTotal()-1; i >= 0; i--)
   {
      ulong ticket = PositionGetTicket(i);
      if(PositionSelectByTicket(ticket))
      {
         MqlTradeRequest request = {};
         MqlTradeResult result = {};
         request.action = TRADE_ACTION_DEAL;
         request.symbol = _Symbol;
         request.volume = PositionGetDouble(POSITION_VOLUME);
         request.type = (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) ? ORDER_TYPE_SELL : ORDER_TYPE_BUY;
         request.price = PositionGetDouble(POSITION_PRICE_CURRENT);
         request.magic = MagicNumber;

         if(!OrderSend(request, result))
            Print("平仓失败,错误代码:", GetLastError());
      }
   }
}

//+------------------------------------------------------------------+
//| 检查盈亏函数                                                     |
//+------------------------------------------------------------------+
void CheckProfitLoss()
{
   double profit = 0;
   for(int i = 0; i < PositionsTotal(); i++)
   {
      ulong ticket = PositionGetTicket(i);
      if(PositionSelectByTicket(ticket) && PositionGetInteger(POSITION_MAGIC) == MagicNumber)
      {
         profit += PositionGetDouble(POSITION_PROFIT);
      }
   }

   if(profit >= TakeProfit || profit <= -StopLoss)
      CloseAllTrades();
}

//+------------------------------------------------------------------+
//| OnTick函数                                                       |
//+------------------------------------------------------------------+
void OnTick()
{
   CheckForSignal();
   CheckProfitLoss();
}
//+------------------------------------------------------------------+

观天之道,执天之行。
行胜于言,取时于天。

成功=艰苦劳动+正确方法+少说空话 --爱因斯坦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /5 下一条

人生者,生存也。
生存所需,财(钱)官(权)也。
财自食伤(子孙福德爻)生,
印星生身荫护,官财印全,适合人间生存也。
若命缺财,缺官,则失去生存权。
一旦脱离父母养育,将天天面临,
从绝望中醒来,又从绝望中睡去。来去如烟!

Archiver|小黑屋|希望祠.同舟.量化

GMT+8, 2025-5-2 22:13 , Processed in 0.022127 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表