CM_Strength
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «cm_strength_plsoft _v0.1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный файл является пользовательским индикатором для MetaTrader 4, который отображает на графике аналитическую информацию о 28 валютных парах. Индикатор рассчитывает и выводит на экран относительную силу валют, процент изменения цены за заданный таймфрейм, положение цены относительно дневного диапазона, спред, соотношение Bid и другие метрики. Также предусмотрены визуальные оповещения о событиях, например, при выходе цены за определённые уровни или при изменении силы валюты.
Входные параметры позволяют настраивать расположение элементов на графике, таймфрейм для расчёта ROC, параметры для анализа волатильности и пробоев, а также включать режим отладки. Индикатор не выполняет торговых операций и не даёт гарантий прибыли; он предназначен исключительно для информационной поддержки трейдера.
Все расчёты производятся на основе рыночных данных, доступных в терминале. Индикатор использует стандартные функции MQL4 для получения котировок и создания графических объектов. Пользовательские настройки включают как числовые, так и строковые параметры, а также переключатели.
Настройки программы
| Настройка | Описание |
|---|---|
| z_axis | Шаг по Z — Шаг по вертикали между строками. |
| x_axis | Смещение по X — Горизонтальное смещение для отображения текста. |
| y_axis | Смещение по Y — Вертикальное смещение для отображения текста. |
| ROC | Разделитель ROC — Разделитель для группы настроек ROC. |
| TimeFrameROC | Таймфрейм ROC — Таймфрейм для расчёта скорости изменения цены (ROC). |
| note3 | Заметка ROC — Текстовая заметка для группы ROC. |
| AlertRoc | Порог оповещения ROC — Пороговое значение для оповещения об изменении цены в процентах. |
| FIBO | Разделитель Фибоначчи — Разделитель для группы настроек Фибоначчи. |
| timeframe | Таймфрейм Фибоначчи — Таймфрейм для расчёта уровней Фибоначчи. |
| lookback | Количество свечей Фибоначчи — Количество свечей для расчёта уровней Фибоначчи. |
| lastbar | Начальный бар Фибоначчи — Начальный бар для расчёта уровней Фибоначчи. |
| BREAKOUT | Разделитель пробоя — Разделитель для группы настроек пробоя. |
| NumberOfDays | Количество дней — Количество дней для анализа. |
| periodBegin | Начало периода — Время начала периода для анализа пробоя. |
| periodEnd | Конец периода — Время окончания периода для анализа пробоя. |
| BoxEnd | Конец диапазона — Время окончания диапазона для анализа пробоя. |
| TIMEMACHINE | Разделитель времени — Разделитель для группы настроек времени. |
| TimeZoneOfData | Часовой пояс данных — Часовой пояс данных графика относительно GMT. |
| TimeZoneOfSession | Часовой пояс сессии — Целевой часовой пояс сессии относительно GMT. |
| DebugLogger | Отладочный журнал — Включает вывод отладочных сообщений в журнал. |
Поиск по коду файла
???//+------------------------------------------------------------------+
#property version "1.00"
#property strict
#property indicator_chart_window
#define BullColor Lime
#define BearColor Red
#define NONE 0
#define DOWN -1
#define UP 1
#define ALERT_BAR 1
sinput int z_axis = 12;
sinput int x_axis = 10;
sinput int y_axis = 50;
input string ROC= "-------------------------";
extern ENUM_TIMEFRAMES TimeFrameROC = PERIOD_M30; // Time frame BBB
extern string note3 = "ROC";
extern double AlertRoc = 0.1;
input string FIBO= "-------------------------";
input ENUM_TIMEFRAMES timeframe = PERIOD_H1; // Timeframe Fibonacci corto
input int lookback = 60; // Numero di candele Fibonacci corto
input int lastbar = 0; // Partenza Fibonacci corto
input string BREAKOUT= "-------------------------";
extern int NumberOfDays = 1;
extern string periodBegin = "05:00";
extern string periodEnd = "09:00";
extern string BoxEnd = "09:00";
input string TIMEMACHINE= "-------------------------"; // Dati numero candela
extern int TimeZoneOfData= 3; // chart time zone (from GMT)
extern int TimeZoneOfSession= 0; // dest time zone (from GMT)
extern bool DebugLogger = false;
bool UseDefaultPairs = true; // Use the default 28 pairs
string OwnPairs = ""; // Comma seperated own pair list
static datetime g_lastCandleOpenTime;
string DefaultPairs[] = {"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"};
string TradePairs[];
string curr[8] = {"USD","EUR","GBP","JPY","AUD","NZD","CAD","CHF"};
string EUR[7] = {"EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD","EURUSD"};
string GBP[6] = {"GBPAUD","GBPCAD","GBPCHF","GBPJPY","GBPNZD","GBPUSD"};
string GBP_R[1] = {"EURGBP"};
string CHF[1] = {"CHFJPY"};
string CHF_R[6] = {"AUDCHF","CADCHF","EURCHF","GBPCHF","NZDCHF","USDCHF"};
string USD[3] = {"USDCAD","USDCHF","USDJPY"};
string USD_R[4] = {"AUDUSD","EURUSD","GBPUSD","NZDUSD"};
string CAD[2] = {"CADCHF","CADJPY"};
string CAD_R[5] = {"AUDCAD","EURCAD","GBPCAD","NZDCAD","USDCAD"};
string NZD[4] = {"NZDCAD","NZDCHF","NZDJPY","NZDUSD"};
string NZD_R[3] = {"AUDNZD","EURNZD","GBPNZD"};
string AUD[5] = {"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD"};
string AUD_R[2] = {"EURAUD","GBPAUD"};
string JPY_R[7] = {"AUDJPY","CADJPY","CHFJPY","EURJPY","GBPJPY","NZDJPY","USDJPY"};
double currstrength[8];
double prevstrength[8];
string postfix=StringSubstr(Symbol(),6,6);
string clos;
string plsoft;
string subfolder="";
string namafile="";
string date_="";
string time_="";
string a="|";
int handlefile=0;
bool writefile=false;
double ChangeArray[28]; //Array for Pairs Change
int cF = 100; //Coefficient of scale
int num,Zero,Wbar,Hbar,Xsize,Ysize;
struct pairinf {
double PairPip;
int pipsfactor;
double Pips;
double PipsSig;
double Pipsprev;
double Spread;
double point;
int lastSignal;
int base;
int quote;
}; pairinf pairinfo[];
struct currency
{
string curr;
double strength;
double prevstrength;
double crs;
int sync;
datetime lastbar;
}
; currency currencies[8];
struct signal
{
string symbol;
double range;
double range1;
double ratio;
double ratio1;
double bidratio;
double fact;
double strength;
double strength_old;
double strength1;
double strength2;
double calc;
double strength3;
double strength4;
double strength5;
double strength6;
double strength7;
double strength8;
double strength_Gap;
double hi;
double lo;
double prevratio;
double prevbid;
double open;
double close;
double bid;
double point;
double Signalperc;
double SigRatio;
double SigRelStr;
double SigBSRatio;
double SigCRS;
double SigGap;
double SigGapPrev;
double SigRatioPrev;
int shift;
}; signal signals[];
string BaseCur, QuoteCur, tMessage;
double BaseVal, QuoteVal, PairVal;
string Symb_text;
double Symb_value;
string FirstCurr = "";
string SecondCurr = "";
int BidRatio[28];
double priceLow[28];
double priceHigh[28];
int Jolly[28];
int alertmail[28][7][2];
double HiPrice, LoPrice, Range;
datetime StartTime;
double iBarBegin[28];
double iBarEnd[28];
double dPriceHigh[28] ;
double dPriceLow[28];
color MyColor;
int OnInit()
{
// код доступен только после оплаты
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
void OnTimer()
{
GetRoc();
GetSignals();
displayMeter();
GetCurr();
GetBreakout();
}
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id==CHARTEVENT_OBJECT_CLICK){
string pairStr = ObjectGetString(0,StringSubstr(sparam,0,"Symb_"+IntegerToString(id)),OBJPROP_TEXT);
if( pairStr != ChartSymbol(ChartID())){
ChartSetSymbolPeriod(ChartID(),pairStr,PERIOD_CURRENT);
}
if (StringFind(sparam,"MyTastoB") >= 0)
{
for(int t=0; t<28; t++){
GetMatrix(t, 370+x_axis, (t*z_axis)+y_axis);
}
}
}
}
void GetBreakout()
{
datetime dtTradeDate=TimeCurrent();
datetime dtTimeBegin, dtTimeEnd, dtTimeObjEnd;
dtTimeBegin = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + periodBegin);
dtTimeEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + BoxEnd);
dtTimeObjEnd = StrToTime(TimeToStr(dtTradeDate, TIME_DATE) + " " + BoxEnd);
int x;
for (int sym = 0; sym < ArraySize(TradePairs); sym++) {
if(_Symbol == TradePairs[sym]) x = sym;
}
iBarBegin[x] = iBarShift(TradePairs[x], timeframe, dtTimeBegin);
iBarEnd[x] = iBarShift(TradePairs[x], timeframe, dtTimeEnd);
dPriceHigh[x] = High[iHighest(TradePairs[x], timeframe, MODE_HIGH, iBarBegin[x]-iBarEnd[x], iBarEnd[x])];
dPriceLow[x] = Low[iLowest (TradePairs[x], timeframe, MODE_LOW , iBarBegin[x]-iBarEnd[x], iBarEnd[x])];
double contoA = dPriceHigh[x] - iClose(TradePairs[x],timeframe ,0);
double contoB = dPriceLow[x] - iClose(TradePairs[x],timeframe ,0);
if(contoA <0) MyColor = clrGreenYellow;
else if(contoB >0) MyColor = clrRed;
else MyColor = clrWhiteSmoke;
int passo = 4;
switch(x)
{
case 2 : passo=3; break;
case 6 : passo=3; break;
case 7 : passo=2; break;
case 12 : passo=2; break;
case 18 : passo=2; break;
case 23 : passo=3; break;
case 27 : passo=2; break;
}
SetText("price"+IntegerToString(x),DoubleToStr(iClose(TradePairs[x],0,0),passo),x_axis+200,(x*z_axis)+y_axis,MyColor,10);
}
void GetRoc()
{
double totPairArray=0; int SpostaX = 12;
for(int i=0; i<28; i++)
{
totPairArray = totPairArray+ChangeArray[i];
ChangeArray[i]=SymbolChange(TradePairs[i],TimeFrameROC);
if(ChangeArray[i]<0)
{
SetText("roc"+IntegerToString(i),DoubleToString(ChangeArray[i],2)+"%",x_axis+320,(i*z_axis)+y_axis,color_for_Roc(ChangeArray[i]),8);
alertmail[i][4][0] = 0;
}
else
{
SetText("roc"+IntegerToString(i),DoubleToString(ChangeArray[i],2)+"%",x_axis+320,(i*z_axis)+y_axis,color_for_Roc(ChangeArray[i]),8);
alertmail[i][4][0] = 1;
}
}
int max = ArrayMaximum(ChangeArray, WHOLE_ARRAY, 0);
int min = ArrayMinimum(ChangeArray, WHOLE_ARRAY, 0);
double tmp=0;
if(ChangeArray[max]>MathAbs(ChangeArray[min])) tmp=ChangeArray[max];
else tmp=MathAbs(ChangeArray[min]);
if(tmp*cF>Ysize/2) cF--;
if((Ysize/2-tmp*cF)>20) cF++;
}
void GetCurr()
{
for(int j=0; j<28; j++)
{
WriteSuperMinMax(TradePairs[j],j);
BaseCur = StringSubstr(TradePairs[j],0,3)+"currdig";
QuoteCur = StringSubstr(TradePairs[j],3,3)+"currdig";
SetText("SymbolA_"+IntegerToString(j),ObjectDescription(BaseCur) ,x_axis+90,(j*z_axis)+y_axis,color_for_profit(ObjectDescription(BaseCur)) ,10);
SetText("SymbolB_"+IntegerToString(j),ObjectDescription(QuoteCur),x_axis+110,(j*z_axis)+y_axis,color_for_profit(ObjectDescription(QuoteCur)) ,10);
string matrix= IntegerToString(j)+","+IntegerToString(DaySearch())+","+IntegerToString(0);
double diff = StringToDouble(ObjectDescription(BaseCur)) - StringToDouble(ObjectDescription(QuoteCur)) ;
int Passo ; if (diff <=0 ) { Passo=60; alertmail[j][5][0]=0; } else { Passo=65; alertmail[j][5][0]=1; }
SetText("SymbolC_"+IntegerToString(j),DoubleToString(diff,1),x_axis+Passo,(j*z_axis)+y_axis,color_for_diff(diff) ,10);
ObjectSetInteger(0,matrix,OBJPROP_COLOR,color_for_diff(diff));
string Matrix= IntegerToString(j)+","+IntegerToString(DaySearch()+1)+","+IntegerToString(0);
ObjectSetInteger(0,Matrix,OBJPROP_COLOR,clrBlack);
if(StringSubstr(TradePairs[j],0,3)==FirstCurr || StringSubstr(TradePairs[j],0,3)==SecondCurr) { alertmail[j][2][0]=1; }else{ alertmail[j][2][0]=0; }
if(StringSubstr(TradePairs[j],3,3)==SecondCurr || StringSubstr(TradePairs[j],3,3)==FirstCurr ) { alertmail[j][3][1]=1; }else{ alertmail[j][3][1]=0; }
if(priceLow[j]<0){
alertmail[j][0][0]=1;
MyColor = Red;
SetText("priceL"+IntegerToString(j),DoubleToStr(priceLow[j],2) ,x_axis+140,(j*z_axis)+y_axis,MyColor,10);}
else if(priceLow[j]>1){
alertmail[j][0][1]=1;
MyColor = Gold;
SetText("priceL"+IntegerToString(j),DoubleToStr(priceLow[j],2) ,x_axis+140,(j*z_axis)+y_axis,MyColor,10);}
else{
alertmail[j][0][0]=0; alertmail[j][0][1]=0;
SetText("priceL"+IntegerToString(j),DoubleToStr(priceLow[j],2) ,x_axis+140,(j*z_axis)+y_axis,clrAqua,10);}
if(priceHigh[j]<0){
alertmail[j][1][0]=1;
MyColor = Red;
SetText("priceH"+IntegerToString(j),DoubleToStr(priceHigh[j],2) ,x_axis+170,(j*z_axis)+y_axis,MyColor,10);}
else if(priceHigh[j]>1){
alertmail[j][1][1]=1;
MyColor = Gold;
SetText("priceH"+IntegerToString(j),DoubleToStr(priceHigh[j],2) ,x_axis+170,(j*z_axis)+y_axis,MyColor,10);}
else{
alertmail[j][1][0]=0; alertmail[j][1][1]=0;
SetText("priceH"+IntegerToString(j),DoubleToStr(priceHigh[j],2) ,x_axis+170,(j*z_axis)+y_axis,clrAqua,10);}
long Spread=NormalizeDouble(MarketInfo(TradePairs[j], MODE_SPREAD),1);
int passo;
if (Spread <=10 ) { passo=14;}
else if (Spread <=100 ) { passo=7; }
else if (Spread <=1000 ) { passo=0; }
SetText("Spread_"+IntegerToString(j),IntegerToString(Spread)+"p",x_axis+250+passo,(j*z_axis)+y_axis,clrAqua,10);
int PassoBR ; if (BidRatio[j] <=10 ) { PassoBR =292;} else { PassoBR=285; }
SetText("BidRatio_"+IntegerToString(j),IntegerToString(DoubleToStr(BidRatio[j],1))+"%",x_axis+PassoBR,(j*z_axis)+y_axis,clrOrange,10);
GetAlert(j);
}
}
void GetAlert(int i)
{
/*
int punteggio = alertmail[i][0][0]+alertmail[i][0][1]+ // Fibo L
alertmail[i][1][0]+alertmail[i][1][1]+ // Fibo H
alertmail[i][2][0]+alertmail[i][2][1]+ // Currency Quote Cur
alertmail[i][3][0]+alertmail[i][3][1]+ // Currency Base
Jolly[i];
*/
int punteggio = 0;
MyColor = clrBlack;
if(alertmail[i][5][0] >= 1){ //differenza
switch(alertmail[i][4][0]) //roc
{
case 1: MyColor = clrGreen; punteggio=1;
if(ObjectGet("priceH"+IntegerToString(i),OBJPROP_COLOR) == clrRed ) punteggio=2;
break;
}}
if(alertmail[i][5][0] <= 0){ //differenza
switch(alertmail[i][4][0]) //roc
{
case 0: MyColor = clrRed; punteggio=1;
if(ObjectGet("priceL"+IntegerToString(i),OBJPROP_COLOR) == clrRed ) punteggio=2;
break;
}}
SetObjText("Sign"+IntegerToString(i),CharToStr(139+punteggio),x_axis+360,(i*z_axis)+y_axis,MyColor,9+punteggio);
}
void GetMatrix(int matrice, int posx, int posy)
{
string matrix;
for(int xi=24; xi >= 1; xi--) //candle
{
for(int xx=1; xx >= 0; xx--) //bollinger
{
matrix= IntegerToString(matrice)+","+IntegerToString(xi)+","+IntegerToString(xx);
SetObjText(matrix,CharToStr(110),(xi*(9))+posx,posy,clrGray,8);
}
}
}
int WriteSuperMinMax(string MySymbol,int dux)
{
int counted_bars=IndicatorCounted();
double lowest=1000.0; double highest=0.0;
for(int i=lookback+lastbar;i>lastbar+1;i--)
{
double curLow0=iClose(MySymbol,timeframe,i-2);
double curLow1=iClose(MySymbol,timeframe,i+1);
double curLow2=iClose(MySymbol,timeframe,i);
double curLow3=iClose(MySymbol,timeframe,i-1);
double curLow4=iClose(MySymbol,timeframe,i-2);
double curHigh0=iClose(MySymbol,timeframe,i+2);
double curHigh1=iClose(MySymbol,timeframe,i+1);
double curHigh2=iClose(MySymbol,timeframe,i);
double curHigh3=iClose(MySymbol,timeframe,i-1);
double curHigh4=iClose(MySymbol,timeframe,i-2);
if(curLow2<=curLow1 && curLow2<=curLow1 && curLow2<=curLoПоказано первые 50% кода (символов: 26076)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.