想要找一些外汇MT4的指标,附有源码,交易的时候可以辅助,编写指标的时候可以参考学习,想改善的时候,可以编辑。
常规的外汇MT4软件交易界面,外汇投资是看一个品种一个周期,但这个界面往往不能满足交易遇的需求,哪这个时候你可以采用同时监控、快速切换货币兑,黄金、原油等外汇多品种、多周期的面板指标。
当显示的颜色为红色,表示当前为上涨状态;
当显示的颜色为绿色,表示当前为下跌状态。 



MT4—监控面板指标源码
下方分享的技术指标为副图分析公式源码,适用于MT4软件,是根据常见的方式改写。仅作为策略思路拓展,不建议直接用于货币兑、黄金、原油等外汇投资实盘中(投资有风险,入市须谨慎)。
交易员可以根据艾云策略所提供的指标源码,结合平时的交易经验进行改编,形成自己的交易策略。
#property copyright “弱水三千.艾云策略”
#property link “www.aiycl.cn”
#property description “作者微信/QQ:289876878”
#property description “出租/搭建AI机器人,群智能提醒服务”
#property description “若需定制其他EA/指标功能,请联系作者!”
#property version “1.00”
//+——————————————————————+
//| BUTTONS_TRO_MODIFIED |
//+——————————————————————+
#property indicator_separate_window
#property indicator_buffers 0
#property strict
//+——————————————————————+
extern bool TURN_OFF = false ;
extern bool SHOW_CANDLE_COLOR = true;
extern string sOption = “Type ALL in Symbols for all symbols “;
extern string Symbols=”AUDCAD;AUDCHF;AUDJPY;AUDNZD;AUDUSD;CADCHF;CADJPY;CHFJPY;EURAUD;EURCAD;EURCHF;EURGBP;EURJPY;EURNZD;EURUSD;GBPAUD;GBPCAD;GBPCHF;GBPJPY;GBPNZD;GBPUSD;NZDCAD;NZDCHF;NZDJPY;NZDUSD;USDCAD;USDCHF;USDJPY;XAUUSD;BTCUSD”;
//extern string Symbols=”AUDJPY;AUDUSD;EURUSD;EURGBP;EURJPY;GBPUSD;GBPJPY;NZDUSD;USDCAD;USDCHF;USDJPY;XAUUSD”; // List of symbols (separated by “;”)
extern string Suffix=””;
extern string UniqueID=”changer”; // Indicator unique ID
extern int ButtonsInARow = 15; // Buttons in a horizontal row
extern int Corner = 2; // Corner
extern int XShift = 20; // Horizontal shift
extern int YShift = 20; // Vertical shift
extern int XSize = 60; // Width of buttons
extern int YSize = 16; // Height of buttons
extern int FSize = 8; // Font size
extern string FontType = “Consolas” ; // Font
extern color Bcolor=clrLightGray; // Button color
extern color Dcolor=clrDarkSlateBlue; // Button border color
extern color Tncolor=clrBlack; // Text color – normal
extern color Sncolor= clrBlue; // Text color – selected
extern bool Transparent= true; // Transparent buttons?
extern color colorUp = Lime ;
extern color colorDn = Red ;
//+——————————————————————+
string aSymbols[], tSymbols, xySymbol,yxSymbol,symbol ;
string CurrencyTable[] = {“AUD”,”CAD”,”CHF”,”EUR”,”GBP”,”JPY”,”NZD”,”USD”};
color FG, BG, XG, FGbuttonTF, BGbuttonTF;
string TF[] = { “1”,”5″,”15″,”30″,”H1″,”H4″,”D”,”W”,”M” } ;
int CP[] = { PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1 };
int CCPER,win ;
string text ;
//+——————————————————————+
bool IsLoaded( string list, string lookfor )
{
if(StringFind( list , lookfor, 0) ) { return(true) ; } else { return(false) ; }
}
//+——————————————————————+
int OnInit()
{
if( TURN_OFF ) { OnDeinit(0); return(0) ; }
IndicatorShortName(“Buttons”);
win = WindowFind(“Buttons”);
FG = Tncolor ;
BG = Bcolor ;
FGbuttonTF = Tncolor ;
BGbuttonTF = Bcolor ;
symbol = Symbol() ;
if(StringFind(AccountInfoString(ACCOUNT_COMPANY),”TW”,0) >= 0 && StringFind(Symbol(),”i”,0) >= 0) { Suffix = “i” ; } else
if(StringFind(AccountInfoString(ACCOUNT_COMPANY),”Gain”,0) >= 0) { Suffix = “pro” ; }
int pairlen = StringLen(symbol);
if(XSize < pairlen*10) { XSize = pairlen*10 -20; }
tSymbols = Symbols;
if(tSymbols == “ALL” )
{
Symbols = “” ;
for(int c=0;c<8;c++)
{
for(int d=c+1;d<8;d++)
{
xySymbol = CurrencyTable[c]+CurrencyTable[d]+Suffix;
yxSymbol = CurrencyTable[d]+CurrencyTable[c]+Suffix;
if( MarketInfo(xySymbol,MODE_BID) != 0.0 && IsLoaded( Symbols, xySymbol ) ) { Symbols = Symbols + xySymbol + “;” ; }
else if( MarketInfo(yxSymbol,MODE_BID) != 0.0 && IsLoaded( Symbols, yxSymbol ) ) { Symbols = Symbols + yxSymbol + “;” ; }
}
}
}
int xpos=0,ypos=0,maxx=0,maxy=0;
if(tSymbols != “NONE” )
{
Symbols=StringTrimLeft(StringTrimRight(Symbols));
if(StringSubstr(Symbols,StringLen(Symbols)-1,1)!=”;”)
Symbols=StringConcatenate(Symbols,”;”);
int s=0,i=StringFind(Symbols,”;”,s);
string current;
while(i>0)
{
current=StringSubstr(Symbols,s,i-s);
ArrayResize(aSymbols,ArraySize(aSymbols)+1);
aSymbols[ArraySize(aSymbols)-1]=current;
s = i + 1;
i = StringFind(Symbols,”;”,s);
}
ShellsortStringArray(aSymbols, 0, false) ;
// int xpos=0,ypos=0,maxx=0,maxy=0;
      for(i=0; i       {           if(i>0 && MathMod(i,ButtonsInARow)==0) { xpos=0; ypos+=YSize+1; }           text = StringSubstr(aSymbols[i],0,StringLen(aSymbols[i])-StringLen(Suffix));          createButton(UniqueID+”:symbol:”+string(i),text,XShift+xpos,YShift+ypos);           xpos+=XSize+1;        } /*          xpos=0; ypos+=YSize*2;       for(i=0; i         { if(i>0 && MathMod(i,ButtonsInARow)==0) { xpos=0; ypos+=YSize+1; } createButton(UniqueID+”:time:”+string(i),sTfTable[i],XShift+xpos,YShift+ypos); xpos+=XSize+1; }  */         setSymbolButtonColor();    }       xpos=0; ypos+=YSize*2;       for(int i=0; i         { if(i>0 && MathMod(i,ButtonsInARow)==0) { xpos=0; ypos+=YSize+1; } createButton(UniqueID+”:time:”+string(i),sTfTable[i],XShift+xpos,YShift+ypos); xpos+=XSize+1; }    setTimeFrameButtonColor();    return(0);   }  //+——————————————————————+ void ShellsortStringArray(string &a[], int size=0, bool desc=false)  { //+——————————————————————+ // Performs a shell sort (rapid resorting) of string array ‘a’ //  default is ascending order, unless ‘desc’ is set to true   int n=ArraySize(a);   if (size>0)  n=size;   int j,i, m;   string mid;   for(m=n/2; m>0; m/=2)  {     for(j=m; j       for(i=j-m; i>=0; i-=m)  {         if (desc)   {           if (a[i+m] <= a[i])             break;           else {             mid = a[i];             a[i] = a[i+m];             a[i+m] = mid;         } }           else  {           if (a[i+m] >= a[i])             break;           else {             mid = a[i];             a[i] = a[i+m];             a[i+m] = mid;         } }     } } }    return ; } //+——————————————————————+ void OnDeinit(const int reason)   {    switch(reason)      {       case REASON_CHARTCHANGE :       case REASON_RECOMPILE   :       case REASON_CLOSE       : break;       default :         {          string lookFor       = UniqueID+”:”;          int    lookForLength = StringLen(lookFor);          for(int i=ObjectsTotal()-1; i>=0; i–)            {             string objectName=ObjectName(i);  if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);            }         }      }   } //+——————————————————————+  void createButton(string name,string caption,int xpos,int ypos)   {    if(ObjectFind(name)!=0)       ObjectCreate(name,OBJ_BUTTON,win,0,0);    ObjectSet(name,OBJPROP_CORNER,0);    ObjectSet(name,OBJPROP_XDISTANCE,xpos);    ObjectSet(name,OBJPROP_YDISTANCE,ypos);    ObjectSet(name,OBJPROP_XSIZE,XSize);    ObjectSet(name,OBJPROP_YSIZE,YSize);    ObjectSetText(name,caption,FSize,FontType,Tncolor);    ObjectSet(name,OBJPROP_FONTSIZE,FSize);    ObjectSet(name,OBJPROP_BORDER_TYPE,BORDER_FLAT);    ObjectSet(name,OBJPROP_COLOR,FG);    ObjectSet(name,OBJPROP_BGCOLOR,BG);    ObjectSet(name,OBJPROP_BACK,Transparent);    ObjectSet(name,OBJPROP_BORDER_COLOR,Dcolor);    ObjectSet(name,OBJPROP_STATE,false);    ObjectSet(name,OBJPROP_HIDDEN,true);    ObjectSet(name,OBJPROP_CORNER,Corner);   } //+——————————————————————+  void setSymbolButtonColor()   {    string lookFor       = UniqueID+”:symbol:”;    int    lookForLength = StringLen(lookFor);    for(int i=ObjectsTotal()-1; i>=0; i–)      {       FG = Tncolor ;        BG = Bcolor ;         string objectName=ObjectName(i);       if(StringSubstr(objectName,0,lookForLength)==lookFor)         {          string symbol=ObjectGetString(0,objectName,OBJPROP_TEXT)+Suffix;          if(SHOW_CANDLE_COLOR)          {                     if( iClose( symbol, PERIOD_CURRENT, 0 )  >= iOpen( symbol, PERIOD_CURRENT, 0 ) )                   { BG = colorUp ; } else { BG = colorDn ; }                           if(symbol==_Symbol) { XG = FG; FG = BG; BG = XG ; }                   ObjectSet(objectName,OBJPROP_COLOR,FG);                   ObjectSet(objectName,OBJPROP_BGCOLOR,BG);                              }          else          {             if(symbol!=_Symbol)                ObjectSet(objectName,OBJPROP_COLOR,Tncolor);             else  ObjectSet(objectName,OBJPROP_COLOR,Sncolor);          }         }      }   }  //+——————————————————————+ void setTimeFrameButtonColor()   {    string lookFor       = UniqueID+”:time:”;    int    lookForLength = StringLen(lookFor);    for(int i=ObjectsTotal()-1; i>=0; i–)    {       FGbuttonTF = Tncolor ;        BGbuttonTF = Bcolor ;         string objectName=ObjectName(i);       if(StringSubstr(objectName,0,lookForLength)==lookFor)         {          string sTime = ObjectGetString(0,objectName,OBJPROP_TEXT) ;          int time = stringToTimeFrame(sTime);          if(time != _Period)          {             if(SHOW_CANDLE_COLOR)             {                        if( iClose( symbol, time, 0 )  >= iOpen( symbol, time, 0 ) )                   { BGbuttonTF = colorUp ; } else { BGbuttonTF = colorDn ; }                           ObjectSet(objectName,OBJPROP_COLOR,FGbuttonTF);                   ObjectSet(objectName,OBJPROP_BGCOLOR,BGbuttonTF);             }                 else             {                     ObjectSet(objectName,OBJPROP_COLOR,Tncolor);               }           }           else           {             if(SHOW_CANDLE_COLOR)             {                        if( iClose( symbol, time, 0 )  >= iOpen( symbol, time, 0 ) )                   { BGbuttonTF = colorUp ; } else { BGbuttonTF = colorDn ; }                      XG = FGbuttonTF; FGbuttonTF = BGbuttonTF; BGbuttonTF = XG ;                               ObjectSet(objectName,OBJPROP_COLOR,FGbuttonTF);                   ObjectSet(objectName,OBJPROP_BGCOLOR,BGbuttonTF);             }                        else { ObjectSet(objectName,OBJPROP_COLOR,Sncolor); }            }         }      }   } //+——————————————————————+  string sTfTable[] = {“M1″,”M5″,”M15″,”M30″,”H1″,”H4″,”D1″,”W1″,”MN”}; int    iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};  //+——————————————————————+ string timeFrameToString(int tf)   {    for(int i=ArraySize(iTfTable)-1; i>=0; i–)       if(tf==iTfTable[i]) return(sTfTable[i]);    return(“”);   }  //+——————————————————————+ int stringToTimeFrame(string tf)   {    for(int i=ArraySize(sTfTable)-1; i>=0; i–)       if(tf==sTfTable[i]) return(iTfTable[i]);    return(0);   } //+——————————————————————+ void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)   {    if(id==CHARTEVENT_OBJECT_CLICK && ObjectGet(sparam,OBJPROP_TYPE)==OBJ_BUTTON)      {          if(StringFind(sparam,UniqueID+”:symbol:”,0)==0) ChartSetSymbolPeriod(0,ObjectGetString(0,sparam,OBJPROP_TEXT)+Suffix,_Period);       if(StringFind(sparam,UniqueID+”:time:”  ,0)==0) ChartSetSymbolPeriod(0,_Symbol,stringToTimeFrame(ObjectGetString(0,sparam,OBJPROP_TEXT)));       if(StringFind(sparam,UniqueID+”:back:”  ,0)==0) ObjectSet(sparam,OBJPROP_STATE,false);      }   } //+——————————————————————+ int start()  {     if(SHOW_CANDLE_COLOR)    {       setTimeFrameButtonColor() ;       setSymbolButtonColor() ;    }    return(0);  } //+——————————————————————+