Quick Change MA

Author: 2023, NotBuffett
0 Views
0 Downloads
0 Favorites
Quick Change MA
ÿþ//+------------------------------------------------------------------+

//|                                 Quick Change MA (method, period) |

//|            !:@8?B 4;O 1KAB@>3> 87<5=5=8O <5B>40 MA (G5@54>20=85) |

//|                        8 ?5@8>40 MA (+/- H03) A:>;L7OI59 A@54=59 |

//+------------------------------------------------------------------+



#property copyright "2023, NotBuffett"

#property link      "https://www.mql5.com"

#property version   "1.00"





//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int maMethod = 1;      // 1:EMA ’! 0:SMA ’! 3:LWMA (G5@54>20=85, 5A;8 maChange=0)

int maPeriod = 100;    // ?5@8>4 ?5@2>=0G0;L=>9 MA

int maChange = 0;      // H03 C25;8G5=8O(+) 8;8 C<5=LH5=8O(-) ?5@8>40 MA



int maWidth = 2;              // B>;I8=0 ;8=88 MA

color maClr = clrBlueViolet;  // F25B MA



int maShift = 0;

int maAP = PRICE_CLOSE;

string maType="Er!";





//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void OnStart()

  {



//+---------------------------------------------------------------------------+

//| @>25@:0 =0 =0;8G85 TextBox (A;54>20B5;L=> A:@8?B @0=55 C65 70?CA:0;AO),  |

//| GB5=85 87 =53> 40==KE ?>AB@>5==>9  8 70?8AL 2 maMethod 8 maPeriod +% |

//| 7=0G5=89 (G5@54>20=85 EMA/SMA/LWMA 8;8  +/- maPeriod =0 7=0G5=85 maChange)|

//+---------------------------------------------------------------------------+



   if(ObjectFind(0,"QuickMA") == 0)

     {



      //- 2KG;5=5=85 40==KE B5:CI59 MA 87 @0=55 A>740==>9 AB@>:8 2 TextBox

      string maGet1 = ObjectGetString(0,"QuickMA",OBJPROP_TEXT);

      string maGet2[];

      StringSplit(maGet1,32,maGet2);    // 32 - :>4 ?@>15;0



      //- C40;5=85 B5:CI59 MA A 3@0D8:0 ?> :>@>B:><C 8<5=8, =0?@8<5@ EMA(100)

      //- 5A;8 MB> 70:><<5=B8@>20BL, B> <>6=> 1KAB@> A>740BL A5B:C MA A H03>< maChange

      string maDel = maGet2[0]+"("+maGet2[2]+")";

      ChartIndicatorDelete(0,0,maDel);



      //- maMethod <5=O5BAO =0 A;54CNI89, 5A;8 maChange=0 (5A;8 =5B, >AB05BAO ?@56=8<)

      maType = maGet2[0];

      if(maType=="EMA")

         maMethod = (maChange==0)? 0:1;  // ’! 0=SMA

      if(maType=="SMA")

         maMethod = (maChange==0)? 3:0;  // ’! 3=LWMA

      if(maType=="LWMA")

         maMethod = (maChange==0)? 1:3;  // ’! 1=EMA

      if(maType=="SMMA")

         maMethod = (maChange==0)? 1:2;  // ’! 1=EMA (2 SMMA =5B A<KA;0, B.:. MB> 5ABL EMA/2)



      //- A>E@0=5=85 ?5@8>40 A:>;L7OI59 (8;8 87<5=5=85, 5A;8 maChange<>0)

      maPeriod = StringToInteger(maGet2[2]) + maChange;

      if(maPeriod<=0)

         maPeriod=10;   //- :>=B@>;L A=865=8O ?5@8>40 =865 =C;O



     }





//+---------------------------------------------------------------------------+

//| !>740=85 =>2>9  (8;8 87<5=5==>9, 5A;8 A@01>B0; ?@54K4CI89 1;>:)         |

//| A 8A?>;L7>20=85 8=48:0B>@0 "Custom Moving Average 2"                      |

//+---------------------------------------------------------------------------+



   int handleMA = iCustom(Symbol(), Period(), "Custom Moving Average 2",

                          maPeriod, maShift, maMethod,maClr,maWidth,maAP);



//- 4>102;5=85  =0 3@0D8:

   ChartIndicatorAdd(0,0,handleMA);



//- ?5@52>4 ?5@8>40 MA 2 B5:AB

   switch(maMethod)

     {

      case 1:

         maType="EMA";

         break;

      case 0:

         maType="SMA";

         break;

      case 3:

         maType="LWMA";

         break;

      case 2:

         maType="SMMA";

         break;

     }



//- >B>1@065=85 40==KE MA 2 >1J5:B5 OBJ_EDIT A 8<5=5< "QuickMA"

//- D0:B8G5A:8 MB> 1;>: 4;O ?5@540G8 40==KE ?>A;54CNI5<C 2K7>2C A:@8?B0 - 0=0;>3 3;>10;L=KE ?5@5<5==KE -:)

   TextBox(0,"QuickMA",maType+" | "+IntegerToString(maPeriod), "Quick Change MA  -  Alt+Z");





   IndicatorRelease(handleMA);

  }



//---------------------------------------------------------------------







//+------------------------------------------------------------------+

//| $C=:F8O TextBox - 1KAB@>5 A>740=85 >1J5:B0 OBJ_EDIT              |

//+------------------------------------------------------------------+



void TextBox(int edit=1,             // 0 - <>6=> :;8:=CBL 8 87<5=8BL B5:AB, 1 - <>6=> ?5@5<5I0BL >1J5:B

             string  label="Text Box",       // C=8:0;L=>5 8<O >1J5:B0, 2:;NG0O ?>4>:=0 (2A5 >1@0I5=8O G5@57 =53>)

             string  text="@825B!",         // B5:AB 4;O >B>1@065=8O

             string  tt="",                  // 45AL <>6=> 2K2>48BL <=>3>AB@>G=K9 B5:AB (A<. B0:65 StringFormat)

             color clr_back=clrNavajoWhite,  // F25B D>=0

             color clr_line=clrGray,         // F25B 3@0=8FK

             color clr_text=clrBlack,        // F25B B5:AB0



             int corner=3,    // C3>; ?@82O7:8 >1J5:B0: 0,1,2,3 (>B MB>3> C3;0 845B >BAG5B :>>@48=0B x 8 y : F5=B@C >:=0)

             int x=170,       // :>>@48=0B0 ?> >A8 X - 170

             int y=40,        // :>>@48=0B0 ?> >A8 Y - 40

             int xsize=120,   // H8@8=0 >1J5:B0 2 ?8:A5;OE - 120

             int ysize=40,    // 2KA>B0 >1J5:B0 2 ?8:A5;OE - 40



             string font="Calibri",  // H@8DB

             int    f_size=11,       // @07<5@ H@8DB0



             int read_only=0,   // B>;L:> 4;O GB5=8O (8<55B A<KA;, :>340 edit=0)

             int sub_window=0,  // =><5@ ?>4>:=0

             long chart_ID=0)   // 845=B8D8:0B>@ 3@0D8:0, 0 - B5:CI89





  {

//--- A>740=85 (8=8F80;870F8O) 3@0D8G5A:>3> >1J5:B0 A 8<5=5< _LABEL_ 8 CAB0=>2:0 7=0G5=89 A2>9AB2 >1J5:B0

//--- ?>@O4>: AB@>: =5 8<55B 7=0G5=8O, 2 B5;5 ?@>3@0<<K B0:65 <>6=> <5=OBL >B45;L=K5 A2>9AB20 >1J5:B0

   ObjectCreate(chart_ID,label,OBJ_EDIT,sub_window,0,0);

   ObjectSetInteger(chart_ID,label,OBJPROP_SELECTABLE,edit);     // 0-<5=OBL B5:AB, 1-?5@5<5I0BL

   ObjectSetInteger(chart_ID,label,OBJPROP_READONLY,read_only);  // B>;L:> 4;O GB5=8O (8<55B A<KA;, :>340 edit=0)



//--- B5:AB 2 >1J5:B5 8 B5:AB ?>4A:07:8

   ObjectSetString(chart_ID,label,OBJPROP_TEXT,text);

   ObjectSetString(chart_ID,label,OBJPROP_TOOLTIP,tt);



//--- F25B0 D>=0, 3@0=8FK, B5:AB0

   ObjectSetInteger(chart_ID,label,OBJPROP_BGCOLOR,clr_back);

   ObjectSetInteger(chart_ID,label,OBJPROP_BORDER_COLOR,clr_line);

   ObjectSetInteger(chart_ID,label,OBJPROP_COLOR,clr_text);



//--- @07<5I5=85 >1J5:B0

   ObjectSetInteger(chart_ID,label,OBJPROP_CORNER,corner);

   ObjectSetInteger(chart_ID,label,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,label,OBJPROP_YDISTANCE,y);

   ObjectSetInteger(chart_ID,label,OBJPROP_XSIZE,xsize);

   ObjectSetInteger(chart_ID,label,OBJPROP_YSIZE,ysize);



//--- H@8DB, @07<5@ H@8DB0

   ObjectSetString(chart_ID,label,OBJPROP_FONT,font);

   ObjectSetInteger(chart_ID,label,OBJPROP_FONTSIZE,f_size);



//--- 4>?>;=8B5;L=K5 A2>9AB20

   ObjectSetInteger(chart_ID,label,OBJPROP_SELECTED,0);                  // >1J5:B 2K45;5=

   ObjectSetInteger(chart_ID,label,OBJPROP_HIDDEN,0);                    // A:@KBL >1J5:B 2 "!?8A:5 >1J5:B>2"

   ObjectSetInteger(chart_ID,label,OBJPROP_BACK,0);                      // >B>1@060BL >1J5:B 70 3@0D8:><

   ObjectSetInteger(chart_ID,label,OBJPROP_ALIGN,ALIGN_CENTER);          // 2K@02=820=85 B5:AB0

   ObjectSetInteger(chart_ID,label,OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);  // B09<D@59<



  }



Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---