FXTT_StrategyChecklist
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «fxtt_fx_scanner.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Продукт представляет собой пользовательский индикатор для MetaTrader 4, который отображает на графике таблицу-сканер с аналитическими данными по всем доступным символам. Для каждого символа показываются выбранные технические показатели и рыночная информация.
Индикатор рисует на графике текстовые метки (OBJ_LABEL), формируя многоколоночную таблицу с заголовками. Обновление данных происходит периодически по таймеру, задаваемому пользователем, а также при каждом пересчёте баров через OnCalculate.
В таблице доступны: текущая цена (Bid/Ask/Spread), средний объём и его процент от текущего, ATR в процентах от среднего диапазона, RSI, Stochastic, ADX с текстовой оценкой тренда, ежедневные пивоты с определением ближайшего уровня (PP/R1-R3/S1-S3), а также скользящая средняя с указанием направления цены относительно неё.
Также индикатор отображает серверное и локальное время, а также обратный отсчёт до закрытия текущей свечи по нескольким таймфреймам. Цветовая индикация значений зависит от заданных пользователем уровней (например, верхний/нижний уровни RSI, уровни стохастика и т.д.).
Настройки программы
| Настройка | Описание |
|---|---|
| Update interval (secs) (TimerInterval) | Интервал обновления — Интервал обновления таблицы в секундах |
| Font Size (FontSize) | Размер шрифта — Размер шрифта для отрисовки текста на графике |
| Font Name (FontName) | Шрифт — Имя шрифта для отрисовки текста на графике |
| Max symbols per column (ColumnHeight) | Высота столбца — Максимальное количество символов, отображаемых в одном столбце таблицы |
| Group0 | Разделитель группы 0 — Визуальный разделитель группы настроек отображения цены |
| Show Price (ShowPrice) | Показать цену — Отображать столбец цены (Bid/Ask/Spread) в таблице |
| Group01 | Разделитель группа 01 — Визуальный разделитель группы настроек отображения спреда |
| Show Spread (ShowSpread) | Показать спред — Отображать столбец спреда в таблице |
| Group1 | Разделитель группа 1 — Визуальный разделитель группы настроек ATR |
| Show ATR (ShowATR) | Показать ATR — Отображать столбец ATR (диапазон) в таблице |
| ATR Timeframe (AtrTimeframe) | Таймфрейм ATR — Таймфрейм для расчёта ATR |
| ATR Period (AtrPeriod) | Период ATR — Период расчёта ATR |
| Group2 | Разделитель группа 2 — Визуальный разделитель группы настроек объёма |
| Show Volume (ShowVolume) | Показать объём — Отображать столбец объёма в таблице |
| Volume Timeframe (VolumeTimeframe) | Таймфрейм объёма — Таймфрейм для расчёта объёма |
| Volume Period (VolumePeriod) | Период объёма — Период для расчёта среднего объёма |
| Group3 | Разделитель группа 3 — Визуальный разделитель группы настроек RSI |
| Show RSI (ShowRsi) | Показать RSI — Отображать столбец RSI в таблице |
| RSI Timeframe (RsiTimeframe) | Таймфрейм RSI — Таймфрейм для расчёта RSI |
| RSI Period (RsiPeriod) | Период RSI — Период расчёта RSI |
| RSI Upper Level (RsiUpperLevel) | Верхний уровень RSI — Верхний уровень RSI, при значении выше которого цвет становится зелёным |
| RSI Lower Level (RsiLowerLevel) | Нижний уровень RSI — Нижний уровень RSI, при значении ниже которого цвет становится красным |
| Group4 | Разделитель группа 4 — Визуальный разделитель группы настроек стохастика |
| Show Stochastic (ShowStoch) | Показать стохастик — Отображать столбец стохастика в таблице |
| Stoch Timeframe (StochTimeframe) | Таймфрейм стохастика — Таймфрейм для расчёта стохастика |
| %K period (StochK) | Период %K — Период %K стохастика |
| %D period (StochD) | Период %D — Период %D стохастика |
| Slowing (StochSlow) | Замедление стохастика — Параметр замедления стохастика |
| MA Method (StochMethod) | Метод стохастика — Метод сглаживания для стохастика (SMA, EMA, SMMA, LWMA) |
| Price Field (StochPrice) | Ценовое поле стохастика — Ценовое поле для расчёта стохастика (High/Low, Close/High и т.д.) |
| Stoch Upper Level (StochUpperLevel) | Верхний уровень стохастика — Верхний уровень стохастика, при значении выше которого цвет становится зелёным |
| Stoch Lower Level (StochLowerLevel) | Нижний уровень стохастика — Нижний уровень стохастика, при значении ниже которого цвет становится красным |
| Group5 | Разделитель группа 5 — Визуальный разделитель группы настроек ADX |
| Show ADX (ShowAdx) | Показать ADX — Отображать столбец ADX в таблице |
| ADX Timeframe (AdxTimeframe) | Таймфрейм ADX — Таймфрейм для расчёта ADX |
| ADX Period (AdxPeriod) | Период ADX — Период расчёта ADX |
| ADX Applied Price (AdxAppliedPrice) | Применяемая цена ADX — Применяемая цена для расчёта ADX (Close, Open, High, Low и т.д.) |
| Group6 | Разделитель группа 6 — Визуальный разделитель группы настроек пивотов |
| Show Pivots (ShowPivots) | Показать пивоты — Отображать столбец ежедневных пивотов в таблице |
| Group7 | Разделитель группа 7 — Визуальный разделитель группы настроек скользящей средней |
| Show MA (ShowMA) | Показать MA — Отображать столбец скользящей средней в таблице |
| MA Timeframe (MATimeframe) | Таймфрейм MA — Таймфрейм для расчёта скользящей средней |
| MA Period (MAPeriod) | Период MA — Период расчёта скользящей средней |
| MA Method (MAMethod) | Метод MA — Метод сглаживания для скользящей средней (SMA, EMA, SMMA, LWMA) |
| MA Applied (MAAppliedPrice) | Применяемая цена MA — Применяемая цена для расчёта скользящей средней (Close, Open, High, Low и т.д.) |
Поиск по коду файла
#property version "2.00"
#property strict
#property indicator_chart_window
string INDI_NAME="MPSCN-";
input int TimerInterval=60; //Update interval (secs)
input int FontSize=10; //Font Size
input string FontName="Calibri"; //Font Name
input int ColumnHeight=50; //Max symbols per column
input string Group0; //---------------------------------------------------
input bool ShowPrice=true; //Show Price
input string Group01; //---------------------------------------------------
input bool ShowSpread=true; //Show Spread
input string Group1; //---------------------------------------------------
input bool ShowATR=true; //Show ATR
input ENUM_TIMEFRAMES AtrTimeframe=PERIOD_H1; //ATR Timeframe
input int AtrPeriod=20; //ATR Period
input string Group2; //---------------------------------------------------
input bool ShowVolume=true; //Show Volume
input ENUM_TIMEFRAMES VolumeTimeframe=PERIOD_H1; //Volume Timeframe
input int VolumePeriod=60; //Volume Period
input string Group3; //---------------------------------------------------
input bool ShowRsi=true; //Show RSI
input ENUM_TIMEFRAMES RsiTimeframe=PERIOD_H1; //RSI Timeframe
input int RsiPeriod=14; //RSI Period
input int RsiUpperLevel = 75; //RSI Upper Level
input int RsiLowerLevel = 25; //RSI Lower Level
input string Group4; //---------------------------------------------------
input bool ShowStoch=true; //Show Stochastic
input ENUM_TIMEFRAMES StochTimeframe=PERIOD_H1; //Stoch Timeframe
input int StochK = 5; //%K period
input int StochD = 3; //%D period
input int StochSlow = 3;//Slowing
input ENUM_MA_METHOD StochMethod=MODE_SMA; //MA Method
input ENUM_STO_PRICE StochPrice=STO_LOWHIGH; //Price Field
input int StochUpperLevel = 80; //Stoch Upper Level
input int StochLowerLevel = 20; //Stoch Lower Level
input string Group5; //---------------------------------------------------
input bool ShowAdx=true; //Show ADX
input ENUM_TIMEFRAMES AdxTimeframe=PERIOD_H1; //ADX Timeframe
input int AdxPeriod=20; //ADX Period
input ENUM_APPLIED_PRICE AdxAppliedPrice=PRICE_CLOSE; //ADX Applied Price
input string Group6; //---------------------------------------------------
input bool ShowPivots=true; //Show Pivots
input string Group7; //---------------------------------------------------
input bool ShowMA=true; //Show MA
input ENUM_TIMEFRAMES MATimeframe=PERIOD_H1; //MA Timeframe
input int MAPeriod=60; //MA Period
input ENUM_MA_METHOD MAMethod=MODE_SMA; //MA Method
input ENUM_APPLIED_PRICE MAAppliedPrice=PRICE_CLOSE; //MA Applied
int GUIXOffset = 20;
int GUIYOffset = 45;
int GUIHeaderXOffset = 20;
int GUIHeaderYOffset = 0;
int GUIColOffset=100;
int ListXOffset = 10;
int ListYOffset = 15;
int ListXMultiplier = 10;
int ListYMultiplier = 15;
datetime TimeMissing;
int OnInit()
{
// код доступен только после оплаты
}
int deinit()
{
ObjectsDeleteAll(ChartID(),INDI_NAME);
return(0);
}
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 OnTimer()
{
DrawMissingTime();
if(TimeSeconds(TimeCurrent())%TimerInterval==0)
{
DrawScanner();
}
}
long getAvgVolume(string symbol,int period)
{
long volume_total=0;
for(int i=0; i<period; i++)
{
volume_total+=iVolume(symbol,VolumeTimeframe,i);
}
return volume_total / period;
}
double getRange(string symbol,int period)
{
int DataPeriod=PERIOD_D1;
int DataBar=iBarShift(symbol,DataPeriod,Time[0]);
double range = iHigh(symbol, period, DataBar) - iLow(symbol, period, DataBar);
double point = MarketInfo(symbol, MODE_POINT);
if(point > 0) return (NormalizeDouble(range / point, 0));
return 1;
}
void DrawMissingTime(int deltaY=0)
{
int x=GUIXOffset+ListXOffset,y=20;
DrawLabel("CurTimeLbl",x,y,"Server Time:"+TimeToStr(TimeCurrent(),TIME_MINUTES),FontSize,FontName,clrWhite);
DrawLabel("LocalTimeLbl",x+=150,y,"Local Time:"+TimeToStr(TimeLocal(),TIME_MINUTES),FontSize,FontName,clrWhite);
DrawLabel("TimeLeftLbl",x+=150,y,"Time until Candle close:",FontSize,FontName,clrWhite);
DrawTimeMissingColum(PERIOD_M1,x+=150,y);
DrawTimeMissingColum(PERIOD_M5,x+=GUIColOffset,y);
DrawTimeMissingColum(PERIOD_M15,x+=GUIColOffset,y,30);
DrawTimeMissingColum(PERIOD_H1,x+=GUIColOffset, y);
DrawTimeMissingColum(PERIOD_H4,x+=GUIColOffset, y);
DrawTimeMissingColum(PERIOD_D1,x+=GUIColOffset, y);
}
void DrawTimeMissingColum(int period,int x,int y,int dxOffset=25)
{
int dx=x;
color timeColor;
string periodStr= GetPeriodStr(period);
string timeLeft = GetTimeToClose(period, timeColor);
DrawLabel("TimeLeftLbl_"+periodStr,dx,y,periodStr+":",FontSize,FontName,clrWhite);
DrawLabel("TimeLeftVal_"+periodStr,dx+=dxOffset,y,timeLeft,FontSize,FontName,timeColor);
}
string GetTimeToClose(int period,color &timeColor)
{
int periodMinutes = periodToMinutes(period);
int shift = periodMinutes*60;
int currentTime = (int)TimeCurrent();
int localTime = (int)TimeLocal();
int barTime = (int)iTime(period);
int diff = (int)MathMax(round((currentTime-localTime)/3600.0)*3600,-24*3600);
string time=getTime(barTime+periodMinutes*60-localTime-diff,timeColor);
time=(TerminalInfoInteger(TERMINAL_CONNECTED)) ? time : time+" x";
return time;
}
void DrawLabel(string name,int x,int y,string label,int size=9,string font="Arial",color clr=DimGray,string tooltip="")
{
name=INDI_NAME+":"+name;
ObjectDelete(name);
ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSetText(name,label,size,font,clr);
ObjectSet(name,OBJPROP_CORNER,0);
ObjectSet(name,OBJPROP_XDISTANCE,x);
ObjectSet(name,OBJPROP_YDISTANCE,y);
ObjectSetString(0,name,OBJPROP_TOOLTIP,tooltip);
}
bool ChartColorSet(int prop_id,const color clr,const long chart_ID=0)
{
ResetLastError();
if(!ChartSetInteger(chart_ID,prop_id,clr))
{
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
return(true);
}
bool ChartModeSet(const long value,const long chart_ID=0)
{
ResetLastError();
if(!ChartSetInteger(chart_ID,CHART_MODE,value))
{
Print(__FUNCTION__+", Error Code = ",GetLastError());
return(false);
}
return(true);
}
void DrawScanner()
{
Print("=============>DrawScanner");
for(int x=0; x<SymbolsTotal(true); x++)
{
DrawSymbol(SymbolName(x,true),x);
}
}
void DrawSymbol(string symbolName,int symbolIdx)
{
int yMult = (int)fmod(symbolIdx, ColumnHeight);
int xMult = (symbolIdx/ColumnHeight);
int x= (GUIXOffset+GUIHeaderXOffset) + (NumVisibleColumns()*GUIColOffset)*xMult;
int y= GUIYOffset+ListYOffset + ListYMultiplier * yMult;
int colOffset=GUIColOffset;
DrawSymbolColumn(symbolName,x,y,symbolName,FontSize,FontName);
if(ShowPrice)
DrawPriceColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
if(ShowSpread)
DrawSpreadColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
if(ShowATR)
DrawRangeColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
if(ShowVolume)
DrawVolumeColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
if(ShowRsi)
DrawRsiColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
if(ShowStoch)
DrawStochColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
if(ShowAdx)
DrawAdxColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
if(ShowPivots)
DrawPivotsColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
if(ShowMA)
DrawMAColumn(symbolName,x+=colOffset,y,symbolName,FontSize,FontName);
}
double getPoint(string symbol)
{
return MarketInfo(symbol,MODE_POINT);
}
double getModifier(string symbol)
{
int digits=(int)MarketInfo(symbol,MODE_DIGITS);
double modifier=1;
if(digits==3 || digits==5)
modifier=10.0;
return modifier;
}
void DrawRsiColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
{
double rsi=NormalizeDouble(iRSI(symbolName,RsiTimeframe,RsiPeriod,PRICE_CLOSE,0),0);
string tooltip=symbolName+"\n.: "+GetPeriodStr(RsiTimeframe)+" RSI ("+IntegerToString(RsiPeriod)+"):.\nCurrent ("+DoubleToStr(rsi,1)+")";
DrawLabel("rsi_"+symbolName,x,y,DoubleToStr(rsi,1),fontSize,fontName,GetRsiColor(rsi),tooltip);
}
void DrawStochColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
{
double stoch=iStochastic(symbolName,StochTimeframe,StochK,StochD,StochSlow,StochMethod,StochPrice,MODE_MAIN,0);
string tooltip=symbolName+"\n.: "+GetPeriodStr(StochTimeframe)+" Stoch :.\nCurrent ("+DoubleToStr(stoch,1)+")";
DrawLabel("stoch_"+symbolName,x,y,DoubleToStr(stoch,1),fontSize,fontName,GetStochColor(stoch),tooltip);
}
void DrawAdxColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
{
double adx=iADX(symbolName,AdxTimeframe,AdxPeriod,AdxAppliedPrice,MODE_MAIN,0);
string tooltip=symbolName+"\n.: "+GetPeriodStr(AdxTimeframe)+" ADX ("+IntegerToString(AdxPeriod)+"):.\nCurrent ("+DoubleToStr(adx,1)+")";
DrawLabel("adx_"+symbolName,x,y,GetAdxStr(adx),fontSize,fontName,GetAdxColor(adx),tooltip);
}
string GetAdxStr(double adx)
{
if(adx<=25)
return "No Trend";
if(adx<=50)
return "Weak Trend";
if(adx<=75)
return "Strong Trend";
return "Very Strong Trend";
}
color GetAdxColor(double adx)
{
if(adx<=25)
return clrWhite;
if(adx<=50)
return clrGreen;
if(adx<=75)
return clrYellow;
return clrRed;
}
void DrawPriceColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
{
int digits=(int)MarketInfo(symbolName,MODE_DIGITS);
double vAsk=NormalizeDouble(MarketInfo(symbolName,MODE_ASK),digits);
double vBid=NormalizeDouble(MarketInfo(symbolName,MODE_BID),digits);
double vSpread=NormalizeDouble(MarketInfo(symbolName,MODE_SPREAD),digits);
string tooltip=symbolName+"\n.: Price :.\nAsk: "+(string)vAsk+"\nBid: "+(string)vBid+"\nSpread: "+(string)vSpread;
DrawLabel("price_"+symbolName,x,y,(string)vBid+":"+ IntegerToString(x),fontSize,fontName,clrWhite,tooltip);
}
void DrawSpreadColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
{
int digits=(int)MarketInfo(symbolName,MODE_DIGITS);
double vAsk=NormalizeDouble(MarketInfo(symbolName,MODE_ASK),digits);
double vBid=NormalizeDouble(MarketInfo(symbolName,MODE_ASK),digits);
double vSpread=NormalizeDouble(MarketInfo(symbolName,MODE_SPREAD),digits);
string tooltip=symbolName+"\n.: SPREAD :.\nAsk: "+(string)vAsk+"\nBid: "+(string)vBid+"\nSpread: "+(string)vSpread;
DrawLabel("spread_"+symbolName,x,y,(string)vSpread,fontSize,fontName,clrWhite,tooltip);
}
void DrawPivotsColumn(string symbolName,int x,int y,string text,int fontSize=8,string fontName="Calibri")
{
double pivots[7];
int digits=(int)MarketInfo(symbolName,MODE_DIGITS);
double vAsk=MarketInfo(symbolName,MODE_BID);
double pivot=NormalizeDouble((GetPivotValue(symbolName,PERIOD_D1)),digits);
pivots[0]=pivot;
pivots[1]=NormalizeDouble((GetPivotResistance(symbolName,PERIOD_D1,pivot,1)),digits);
pivots[2]=NormalizeDouble((GetPivotResistance(symbolName,PERIOD_D1,pivot,2)),digits);
pivots[3]=NormalizeDouble((GetPivotResistance(symbolName,PERIOD_D1,pivot,3)),digits);
pivots[4]=NormalizeDouble((GetPivotSupport(symbolName,PERIOD_D1,pivot,1)),digits);
pivots[5]=NormalizeDouble((GetPivotSupport(symbolName,PERIOD_D1,pivot,2)),digits);
pivots[6]=NormalizeDouble((GetPivotSupport(symbolName,PERIOD_D1,pivot,3)),digits);
int closestIdx=GetClosestPivot(vAsk,pivots);
double pips=vAsk-pivots[closestIdx];
string tooltip=symbolName+"\n.: Daily Pivots :.\nPP: "+DoubleToStr(pivots[0])+"\nR1: "+DoubleToStr(pivots[1]);
string pivotText=GetPivotDirection(pips)+" "+GetPivotStr(closestIdx);
DrawLabel("pivoПоказано первые 50% кода (символов: 20906)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.