MT4软件---外汇多品种、多周期的监控切换面板指标

想要找一些外汇MT4的指标,附有源码,交易的时候可以辅助,编写指标的时候可以参考学习,想改善的时候,可以编辑。

转载请注明文章出处:艾云策略指标软件|恒指期货黄金股指原油外汇分析指标软件系统 - 首页

指标

常规的MT4界面,外汇投资是看一个品种一个周期,但这个界面往往不能满足交易遇的需求,哪这个时间你可以采用同时监控、快速切换货币兑,黄金、原油等外汇多品种、多周期的面板指标。

当显示的颜色为红色,表示当前为上涨状态;

当显示的颜色为绿色,表示当前为下跌状态。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码

下方分享的技术指标为副图分析公式源码,适用于MT4软件,是根据常见的方式改写。仅作为策略思路拓展,不建议直接用于货币兑、黄金、原油等外汇投资实盘中(投资有风险,入市须谨慎)。

交易员可以根据艾云策略所提供的指标源码,结合平时的交易经验进行改编,形成自己的交易策略。

//±-----------------------------------------------------------------+

//| 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 < pairlen10) { XSize = pairlen10 -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<ArraySize(aSymbols); 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<ArraySize(sTfTable); 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<ArraySize(sTfTable); 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<n; 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+“🔙” ,0)==0) ObjectSet(sparam,OBJPROP_STATE,false);

}

}

//±-----------------------------------------------------------------+

int start()

{

if(SHOW_CANDLE_COLOR)

{

setTimeFrameButtonColor() ;

setSymbolButtonColor() ;

}

return(0);

}

//±-----------------------------------------------------------------+

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MT4-DKX多空分水线是一款专为MetaTrader 4平台设计的技术指标扩展文件(.ex4)。该指标的主要作用是帮助交易者判断市场的多空力量变化和趋势反转的时机。 该指标的计算基于市场价格和成交量的综合分析。它通过分析市场的多空力量平衡来判断市场趋势的转折点。在图表上,MT4-DKX多空分水线以分水线的形式呈现,当多头力量高于空头力量时,分水线上升,表示多头趋势;当空头力量高于多头力量时,分水线下降,表示空头趋势。交叉分水线的位置则表示市场趋势发生了反转的可能,提示交易者注意趋势变化。 该指标的应用可以帮助交易者更好地理解市场趋势,并作出相应的交易决策。当分水线上升或下降时,交易者可以借此确认市场的多空力量强弱,并考虑进一步的买入或卖出机会。当分水线交叉时,交易者可以借此判断趋势反转的可能性,以避免错过逆势交易机会。 总结而言,MT4-DKX多空分水线是一款可在MetaTrader 4平台上使用的技术指标,通过对市场多空力量的综合分析来判断市场趋势的转折点。它的应用能够帮助交易者更好地把握市场行情,作出更明智的交易决策。 ### 回答2: MT4-DKX多空分水线是一种基于MetaTrader 4(MT4)平台的技术指标,它的全称是MT4-DKX Bull Bear Separation Line。这个指标旨在帮助交易者观察市场趋势的转变。它通过计算一段时间内的股价波动平均值,并将其以曲线图的形式呈现,以便交易者更加直观地观察市场的多空力量。 在MT4-DKX多空分水线指标中,分水线的主要含义是表示市场空多力量的分割线。当股价在分水线上方运动时,意味着市场处于多头(上涨)状态;而当股价低于分水线时,意味着市场处于空头(下跌)状态。交易者可以根据这个指标的图表变动来判断市场当前的多空态势,从而制定相应的交易策略。 此外,MT4-DKX多空分水线指标还可以配合其他技术指标一起使用,以增强分析和决策的准确性。比如,交易者可以将其与其他趋势指标如移动平均线等进行比较,来进一步确认市场的多空趋势,并推测未来价格的走势。 总之,MT4-DKX多空分水线是一种用于辅助交易决策的技术指标,通过分析股价的均值波动情况,帮助交易者判断市场的多空力量和趋势变化。使用此指标可以更好地把握市场的行情,从而更加科学和有依据地进行交易操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值