Indicator Collection
Indicator Collection
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
// More information about this indicator can be found at:
|
||||
// http://fxcodebase.com/code/viewtopic.php?f=38&t=69358
|
||||
// More information about this indicator can be found at:
|
||||
//http://fxcodebase.com/code/viewtopic.php?f=38&t=69358
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| Copyright © 2020, Gehtsoft USA LLC |
|
||||
//| http://fxcodebase.com |
|
||||
//+------------------------------------------------------------------+
|
||||
//| Developed by : Mario Jemic |
|
||||
//| mario.jemic@gmail.com |
|
||||
//| https://AppliedMachineLearning.systems |
|
||||
//+------------------------------------------------------------------+
|
||||
//| Support our efforts by donating |
|
||||
//| Paypal : https://goo.gl/9Rj74e |
|
||||
//+------------------------------------------------------------------+
|
||||
//| Patreon : https://goo.gl/GdXWeN |
|
||||
//| BitCoin : 15VCJTLaz12Amr7adHSBtL9v8XomURo9RF |
|
||||
//| BitCoin Cash : 1BEtS465S3Su438Kc58h2sqvVvHK9Mijtg |
|
||||
//| Ethereum : 0x8C110cD61538fb6d7A2B47858F0c0AaBd663068D |
|
||||
//| LiteCoin : LLU8PSY2vsq7B9kRELLZQcKf5nJQrdeqwD |
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
#property copyright "Copyright © 2020, Gehtsoft USA LLC"
|
||||
#property link "http://fxcodebase.com"
|
||||
#property version "1.0"
|
||||
#property strict
|
||||
|
||||
input string Comment1 = "- Comma Separated Pairs - Ex: EURUSD,EURJPY,GBPUSD - ";
|
||||
input string Pairs = "EURUSD,EURJPY,USDJPY,GBPUSD";
|
||||
input color button_with_trades_color = Green; // Color of button with trades
|
||||
input ENUM_BASE_CORNER corner = CORNER_RIGHT_UPPER; // Corner
|
||||
input int x_start = 50;
|
||||
input int y_start = 20;
|
||||
int button_width = 50;
|
||||
int button_height = 20;
|
||||
|
||||
string IndicatorName;
|
||||
string IndicatorObjPrefix;
|
||||
string GenerateIndicatorName(const string target)
|
||||
{
|
||||
string name = target;
|
||||
return name;
|
||||
}
|
||||
|
||||
string _symbols[];
|
||||
void split(string& arr[], string str, string sym)
|
||||
{
|
||||
ArrayResize(arr, 0);
|
||||
int len = StringLen(str);
|
||||
for (int i=0; i < len;)
|
||||
{
|
||||
int pos = StringFind(str, sym, i);
|
||||
if (pos == -1)
|
||||
pos = len;
|
||||
|
||||
string item = StringSubstr(str, i, pos-i);
|
||||
StringTrimLeft(item);
|
||||
StringTrimRight(item);
|
||||
|
||||
int size = ArraySize(arr);
|
||||
ArrayResize(arr, size+1);
|
||||
arr[size] = item;
|
||||
|
||||
i = pos+1;
|
||||
}
|
||||
}
|
||||
|
||||
int OnInit(void)
|
||||
{
|
||||
IndicatorName = GenerateIndicatorName("Symbol Changer");
|
||||
IndicatorObjPrefix = "__" + IndicatorName + "__";
|
||||
IndicatorSetString(INDICATOR_SHORTNAME, IndicatorName);
|
||||
IndicatorSetInteger(INDICATOR_DIGITS, Digits());
|
||||
|
||||
split(_symbols, Pairs, ",");
|
||||
|
||||
DoInit();
|
||||
|
||||
return INIT_SUCCEEDED;
|
||||
}
|
||||
|
||||
void DoInit()
|
||||
{
|
||||
guiCreate();
|
||||
guiRefresh();
|
||||
}
|
||||
|
||||
void OnDeinit(const int reason)
|
||||
{
|
||||
ObjectsDeleteAll(0, IndicatorObjPrefix);
|
||||
}
|
||||
|
||||
int OnCalculate(const int rates_total, // size of input time series
|
||||
const int prev_calculated, // number of handled bars at the previous call
|
||||
const datetime& time[], // Time array
|
||||
const double& open[], // Open array
|
||||
const double& high[], // High array
|
||||
const double& low[], // Low array
|
||||
const double& close[], // Close array
|
||||
const long& tick_volume[], // Tick Volume array
|
||||
const long& volume[], // Real Volume array
|
||||
const int& spread[] // Spread array
|
||||
)
|
||||
{
|
||||
guiRefresh();
|
||||
|
||||
return rates_total;
|
||||
}
|
||||
|
||||
bool TradesExist(string symbol)
|
||||
{
|
||||
for (int i = PositionsTotal() - 1; i >= 0; i--)
|
||||
{
|
||||
if (PositionGetSymbol(i) == symbol)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void guiRefresh()
|
||||
{
|
||||
for (int i = 0; i < ArraySize(_symbols); ++i)
|
||||
{
|
||||
string item = _symbols[i];
|
||||
if (_Symbol == item)
|
||||
ObjectSetInteger(0, IndicatorObjPrefix + "_BT_" + item, OBJPROP_STATE, true);
|
||||
else
|
||||
ObjectSetInteger(0, IndicatorObjPrefix + "_BT_" + item, OBJPROP_STATE, false);
|
||||
if (TradesExist(item))
|
||||
{
|
||||
ObjectSetInteger(0, IndicatorObjPrefix + "_BT_" + item, OBJPROP_BGCOLOR, button_with_trades_color);
|
||||
}
|
||||
else
|
||||
{
|
||||
ObjectSetInteger(0, IndicatorObjPrefix + "_BT_" + item, OBJPROP_BGCOLOR, clrLightGray);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void guiCreate()
|
||||
{
|
||||
for (int i = 0; i < ArraySize(_symbols); ++i)
|
||||
{
|
||||
string item = _symbols[i];
|
||||
ButtonCreate(IndicatorObjPrefix + "_BT_" + item, x_start + (button_width * i), y_start, button_width, button_height, item);
|
||||
}
|
||||
}
|
||||
|
||||
void OnChartEvent(const int id,
|
||||
const long &lparam,
|
||||
const double &dparam,
|
||||
const string &sparam
|
||||
)
|
||||
{
|
||||
if (id == CHARTEVENT_OBJECT_CLICK)
|
||||
{
|
||||
if (StringFind(sparam,"_BT_",0) != -1)
|
||||
{
|
||||
for (int i = 0; i < ArraySize(_symbols); ++i)
|
||||
{
|
||||
string item = _symbols[i];
|
||||
if (StringFind(sparam, item, 0) != -1)
|
||||
{
|
||||
ChartSetSymbolPeriod(0, item, _Period);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool ButtonCreate(const string name = "Button", // button name
|
||||
const int x=10, // X coordinate
|
||||
const int y=10, // Y coordinate
|
||||
const int width=20, // button width
|
||||
const int height=20, // button height
|
||||
const string text="", // text
|
||||
const string tooltip="\n", // tooltip
|
||||
const int font_size=8, // font size
|
||||
const string font="Arial", // font
|
||||
const color clr=clrBlack, // text color
|
||||
const color back_clr=clrLightGray // background color
|
||||
)
|
||||
{
|
||||
ResetLastError();
|
||||
if(ObjectFind(0,name)>-1)
|
||||
return(false);
|
||||
|
||||
if(!ObjectCreate(0,name,OBJ_BUTTON,0,0,0))
|
||||
{
|
||||
Print(__FUNCTION__,
|
||||
": failed to create button! Error code = ",GetLastError());
|
||||
return(false);
|
||||
}
|
||||
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
|
||||
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
|
||||
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
|
||||
ObjectSetInteger(0,name,OBJPROP_XSIZE,width);
|
||||
ObjectSetInteger(0,name,OBJPROP_YSIZE,height);
|
||||
ObjectSetInteger(0,name,OBJPROP_CORNER, corner);
|
||||
ObjectSetString(0,name,OBJPROP_FONT,font);
|
||||
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
|
||||
ObjectSetString(0,name,OBJPROP_TEXT,text);
|
||||
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size);
|
||||
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,back_clr);
|
||||
ObjectSetInteger(0,name,OBJPROP_BACK,false);
|
||||
ObjectSetInteger(0,name,OBJPROP_STATE,false);
|
||||
ObjectSetInteger(0,name,OBJPROP_ZORDER,10);
|
||||
ObjectSetString(0,name,OBJPROP_TOOLTIP,tooltip);
|
||||
return(true);
|
||||
}
|
||||
Reference in New Issue
Block a user