X-TMA CHANNEL-01
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «!!!-mt4 x-tma channel-01 aa button.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный файл является пользовательским индикатором для MetaTrader 5, предназначенным для отображения на графике ценовых каналов и вспомогательных элементов. Индикатор рассчитывает и рисует две независимые линии канала с настраиваемыми периодами, цветами и множителями волатильности, а также ленту между их границами. Дополнительно предусмотрены стрелки-сигналы, которые могут отображаться на графике в зависимости от выбранного режима.
Индикатор поддерживает уведомления о событиях: всплывающие сообщения, звуковой сигнал, электронную почту и мобильные оповещения. На графике размещается кнопка, позволяющая включать и отключать отображение данных индикатора без удаления его с графика. Состояние видимости сохраняется через глобальную переменную терминала.
Настройки сгруппированы по разделам: параметры первого канала, второго канала, ленты и внешнего вида стрелок, а также параметры кнопки управления. Все вычисления выполняются на основе ценовых данных и стандартных индикаторов MetaTrader.
Настройки программы
| Настройка | Описание |
|---|---|
| Indicator | Строка с названием индикатора, отображаемая в его заголовке. |
| STR01 | Текстовая метка-разделитель для группы настроек первого канала TMA. |
| showTMA1 | Включает отображение первого канала. |
| TMA1per | Период расчёта первого канала. |
| TMA1clr | Цвет линий первого канала. |
| TMA1atrMulti | Множитель, применяемый к значению волатильности при расчёте границ первого канала. |
| STR02 | Текстовая метка-разделитель для группы настроек второго канала TMA. |
| showTMA2 | Включает отображение второго канала. |
| TMA2per | Период расчёта второго канала. |
| TMA2price | Тип цены, используемый при расчёте второго канала. |
| TMA2clr | Цвет линий второго канала. |
| STR03 | Текстовая метка-разделитель для группы настроек ленты. |
| ShowArrows | Режим отображения стрелок: скрыть, внутри, по центру или снаружи относительно свечи. |
| ARROWBAR | Номер бара, на котором отображается стрелка. Значение 0 означает отрисовку на текущем баре, что может привести к исчезновению стрелки до закрытия бара. |
| ArrowGap | Расстояние в пунктах от максимума или минимума свечи до позиции стрелки. |
| SoundFile | Имя звукового файла, воспроизводимого при появлении сигнала. |
| SIGNALBAR | Номер бара, на котором проверяется наличие сигнала для отправки уведомлений. |
| button_note1 | Текстовая метка-разделитель перед группой настроек кнопки. |
| btn_corner | Угол графика, к которому привязана кнопка. |
| btn_text | Текст, отображаемый на кнопке. |
| btn_Font | Название шрифта для текста кнопки. |
| btn_FontSize | Размер шрифта текста кнопки. |
| btn_text_ON_color | Цвет текста кнопки, когда отображение данных включено. |
| btn_text_OFF_color | Цвет текста кнопки, когда отображение данных выключено. |
| btn_background_color | Цвет фона кнопки. |
| btn_border_color | Цвет рамки кнопки. |
| button_x | Горизонтальное смещение кнопки от выбранного угла графика. |
| button_y | Вертикальное смещение кнопки от выбранного угла графика. |
| btn_Width | Ширина кнопки в пикселях. |
| btn_Height | Высота кнопки в пикселях. |
| button_note2 | Текстовая метка-разделитель после группы настроек кнопки. |
Поиск по коду файла
#property description "Let light shine out of darkness and illuminate your world"
#property description "and with this freedom leave behind your cave of denial"
#property indicator_chart_window
#property indicator_buffers 17
#define Version "TMA CHANNEL-01"
string ID="Xard>",TimeFrame="Current time frame";
extern string Indicator = Version;
extern string STR01 = "<<<==== [01] TMA1 Settings ====>>>";
extern bool showTMA1 = false;
extern int TMA1per = 56,TMA1atr=100,TMA1width=1;
extern color TMA1clr = clrRed;
extern double TMA1atrMulti = 2.;
double TMA1[],TMA1up[],TMA1dn[],TMA1bandUp[],TMA1bandDn[];
extern string STR02 = "<<<==== [02] TMA2 Settings ====>>>";
extern bool showTMA2 = true, Extrapolate=true;
extern int TMA2per = 56,TMA2atr=100,TMA2width=3;
extern ENUM_APPLIED_PRICE TMA2price = PRICE_WEIGHTED;
extern color TMA2clr = clrDimGray;
extern double TMA2atrMulti = 2.; bool returnBars;
double TMA2[],TMA2up[],TMA2dn[],TMA2bandUp[],TMA2bandDn[]; double TMA2slope[],trend1[],trend2[];
extern string STR03 = "<<<==== [03] Ribbon Settings ====>>>";
extern bool showRIBBON = true; double MA1[],MA2[],MA3[],MA4[];
extern color RibColUP = C'80,80,180',RibColDN=C'160,60,60'; int getChartScale=WRONG_VALUE;
enum showAR { HideArrows, INSIDE, CENTER, OUTSIDE }; //enum showAR { aDoNotCALC, HideArrows, aOnCHART, aOnINDIK };
extern showAR ShowArrows = OUTSIDE; //IN
extern int ARROWBAR = 0; //На каком баре рисовать Стрелку: =0 - рисовать на текущем (до закрытия - может исчезнуть)
extern int ArrowGap = 3; //Дистанция от High/Low свечи
extern color ColorBUY = clrAqua, //PaleGreen, //LightGreen, //Turquoise, //White, //LightCyan, //White, //LimeGreen, //FireBrick, //
ColorSELL = clrOrange; //HotPink; //LightPink; //Salmon; //HotPink; //Orange; //Magenta; //Red; //Gold; //SlateBlue; //
extern int CodeBUY = 233,
CodeSELL = 234,
ArrowSize = 2;
extern string SoundFile = "alert2.wav"; //"news.wav"; //"expert.wav"; // //"stops.wav" //
extern int SIGNALBAR = 1; //На каком баре сигналить....
extern bool AlertsMessage = true, //false,
AlertsSound = true, //false,
AlertsEmail = false,
AlertsMobile = false;
double ARRUP[], ARRDN[]; datetime TimeBar=0; ENUM_TIMEFRAMES TimeFrameS=PERIOD_CURRENT; string sTFR;
extern string button_note1 = "------------------------------";
extern ENUM_BASE_CORNER btn_corner = CORNER_LEFT_UPPER; // chart btn_corner for anchoring
extern string btn_text = "TMA";
extern string btn_Font = "Arial";
extern int btn_FontSize = 10; //btn__font size
extern color btn_text_ON_color = clrWhite;
extern color btn_text_OFF_color = clrRed;
extern color btn_background_color = clrDimGray;
extern color btn_border_color = clrBlack;
extern int button_x = 20; //btn__x
extern int button_y = 13; //btn__y
extern int btn_Width = 60; //btn__width
extern int btn_Height = 20; //btn__height
extern string button_note2 = "------------------------------";
bool show_data = true;
string IndicatorName, IndicatorObjPrefix;
bool calculateValue; string FontType="Arial Black",SymPair="",indicatorFileName;
double data1; int timeFrame,BarsCount=1000,Type,Type2,win,FontSize=14,FontSize2=12,pipsize;
int init2(){
int Buffers=17,Buf=-1; IndicatorBuffers(Buffers); TMA2per=MathMax(TMA2per,1);
if(TimeFrame==0 || TimeFrame<Period()) TimeFrame=Period(); timeFrame=stringToTimeFrame(TimeFrame);
TimeFrameS = fmax(TimeFrameS,_Period); /*TFK = TimeFrame/_Period;*/ sTFR = StringSubstr(EnumToString(TimeFrameS),7);
win=WindowFind(ID);
if(showRIBBON) Type=DRAW_HISTOGRAM; else Type=DRAW_NONE;
Buf+=1; SetIndexBuffer(Buf,MA1);
Buf+=1; SetIndexBuffer(Buf,MA2);
Buf+=1; SetIndexBuffer(Buf,MA3);
Buf+=1; SetIndexBuffer(Buf,MA4); fSetBuffers();
if(showTMA1) Type=DRAW_LINE; else Type=DRAW_NONE; int T1w=TMA1width; color T1c=TMA1clr;
Buf+=1; SetIndexBuffer(Buf,TMA1); SetIndexStyle(Buf,DRAW_NONE); SetIndexDrawBegin(Buf,TMA1per);
Buf+=1; SetIndexBuffer(Buf,TMA1bandUp); SetIndexStyle(Buf,Type,0,T1w,T1c); SetIndexDrawBegin(Buf,TMA1per);
Buf+=1; SetIndexBuffer(Buf,TMA1bandDn); SetIndexStyle(Buf,Type,0,T1w,T1c); SetIndexDrawBegin(Buf,TMA1per);
if(showTMA2) Type=DRAW_LINE; else Type=DRAW_NONE; int T2w=TMA2width; color T2c=TMA2clr;
Buf+=1; SetIndexBuffer(Buf,TMA2); SetIndexStyle(Buf,DRAW_NONE); SetIndexDrawBegin(Buf,TMA2per);
Buf+=1; SetIndexBuffer(Buf,TMA2up); SetIndexStyle(Buf,DRAW_NONE); SetIndexDrawBegin(Buf,TMA2per);
Buf+=1; SetIndexBuffer(Buf,TMA2dn); SetIndexStyle(Buf,DRAW_NONE); SetIndexDrawBegin(Buf,TMA2per);
Buf+=1; SetIndexBuffer(Buf,TMA2bandUp); SetIndexStyle(Buf,Type,0,T2w,T2c); SetIndexDrawBegin(Buf,TMA2per);
Buf+=1; SetIndexBuffer(Buf,TMA2bandDn); SetIndexStyle(Buf,Type,0,T2w,T2c); SetIndexDrawBegin(Buf,TMA2per);
Buf+=1; SetIndexBuffer(Buf,TMA2slope); SetIndexStyle(Buf,DRAW_NONE);
Buf+=1; SetIndexBuffer(Buf,trend1); SetIndexStyle(Buf,DRAW_NONE);
Buf+=1; SetIndexBuffer(Buf,trend2); SetIndexStyle(Buf,DRAW_NONE);
Buf+=1; SetIndexBuffer(Buf,ARRUP); SetIndexStyle(Buf,ShowArrows>0?DRAW_ARROW:DRAW_NONE,EMPTY,ArrowSize,ColorBUY); SetIndexArrow(Buf,CodeBUY);
Buf+=1; SetIndexBuffer(Buf,ARRDN); SetIndexStyle(Buf,ShowArrows>0?DRAW_ARROW:DRAW_NONE,EMPTY,ArrowSize,ColorSELL); SetIndexArrow(Buf,CodeSELL);
if(Buffers != Buf+1) Print("*******Buffer MisMatch!!! ",Buffers," ",Buf);
for(int Bufx=0;Bufx<indicator_buffers;Bufx++){SetIndexLabel(Bufx,"X-TMA");}
indicatorFileName = WindowExpertName();
calculateValue = (TimeFrame=="calculateValue"); if (calculateValue) return(0);
returnBars = (TimeFrame=="returnBars"); if (returnBars) return(0);
timeFrame = stringToTimeFrame(TimeFrame); return(INIT_SUCCEEDED);}//End OnInit
void deinit2(){ int reason; switch(reason){
case REASON_CHARTCHANGE :
case REASON_RECOMPILE :
case REASON_CLOSE : break;
default : {
CleanUpOnAisle1(ID); string lookFor = ID+":"; int lookForLength = StringLen(lookFor);
for(int io=ObjectsTotal()-1; io>=0; io--){string objectName=ObjectName(io);
if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);}}}}
int start2()
{
fSetBuffers();
int counted_bars=IndicatorCounted(); int i,j,k,limit; double TMA1range;
if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--;
limit=MathMin(Bars-counted_bars+TMA2per,Bars-1); if(returnBars){TMA2[0] = limit+1; return(0);}
for (i=limit; i>=0; i--){
TMA1[i] = EMPTY_VALUE;
TMA1up[i] = EMPTY_VALUE;
TMA1dn[i] = EMPTY_VALUE;
TMA1[i] = iMA(NULL,0,TMA1per,0,MODE_LWMA,PRICE_CLOSE,i);
TMA1range = iATR(NULL,0,TMA1atr,i+10);
TMA1bandUp[i] = TMA1[i+1] + (TMA1range * TMA1atrMulti);
TMA1bandDn[i] = TMA1[i+1] - (TMA1range * TMA1atrMulti);}
if(calculateValue || timeFrame==Period()){
if(TMA2slope[limit]==-1) CleanPoint(limit,TMA2up,TMA2dn);
for(i=limit;i>=0;i--){
if(Extrapolate || (!Extrapolate && i>TMA2per)){
double sum = (TMA2per+1)*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i);
double sumw = (TMA2per+1);
for(j=1, k=TMA2per; j<=TMA2per; j++, k--){
sum += k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i+j); sumw += k;
if(j<=i){ sum += k*iMA(NULL,0,1,0,MODE_SMA,TMA2price,i-j); sumw += k;}}
double TMA2range = iATR(NULL,0,TMA2atr,i+10)*TMA2atrMulti;
TMA2[i] = sum/sumw;
TMA2bandUp[i] = TMA2[i]+TMA2range;
TMA2bandDn[i] = TMA2[i]-TMA2range;} else {
TMA2[i] = TMA2[i+1];
TMA2bandUp[i] = TMA2bandUp[i+1];
TMA2bandDn[i] = TMA2bandDn[i+1];}
TMA2up[i] = EMPTY_VALUE;
TMA2dn[i] = EMPTY_VALUE;
TMA2slope[i] = TMA2slope[i+1];
trend1[i] = 0;
trend2[i] = trend2[i+1];
if(TMA2[i]> TMA2[i+1]) TMA2slope[i] = 1;
if(TMA2[i]< TMA2[i+1]) TMA2slope[i] =-1;
if(Close[i] > TMA2bandUp[i]) trend2[i] = 1;
if(Close[i] < TMA2bandDn[i]) trend2[i] =-1;
if(TMA2slope[i]==-1) PlotPoint(i,TMA2up,TMA2dn,TMA2); //}
if(TMA1bandUp[i]>TMA2bandUp[i]){MA2[i]=TMA1bandUp[i];MA1[i]=TMA2bandUp[i];MA4[i]=EMPTY_VALUE;MA3[i]=EMPTY_VALUE;}
if(TMA1bandDn[i]<TMA2bandDn[i]){MA4[i]=TMA1bandDn[i];MA3[i]=TMA2bandDn[i];MA2[i]=EMPTY_VALUE;MA1[i]=EMPTY_VALUE;}
ARRDN[i]=EMPTY_VALUE; if (MA1[i+ARROWBAR]!=EMPTY_VALUE && MA1[i+1+ARROWBAR]==EMPTY_VALUE) ARRDN[i] = setArrow("sell",TMA1bandUp,i);
ARRUP[i]=EMPTY_VALUE; if (MA3[i+ARROWBAR]!=EMPTY_VALUE && MA3[i+1+ARROWBAR]==EMPTY_VALUE) ARRUP[i] = setArrow("buy",TMA1bandDn,i);}
if (AlertsMessage || AlertsEmail || AlertsMobile || AlertsSound) { ///
string messageUP = WindowExpertName()+" >> "+_Symbol+", "+sTFR+" >> Arrow UP >> BUY"; ///above
string messageDN = WindowExpertName()+" << "+_Symbol+", "+sTFR+" << Arrow DN << SELL"; ///below
if (TimeBar!=Time[0] && ARRUP[SIGNALBAR]Показано первые 50% кода (символов: 15611)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.