← К каталогу
Исходный код · ID 1333

support_resistance indicator andre.mq5

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор для MetaTrader 4, отображающий на графике горизонтальные уровни поддержки и сопротивления, точки разворота, уровни Фибоначчи, уровни Камариллы, средние и квартальные точки, а также уровни открытия и дневного диапазона. Работает на основе данных цен H1 и вычисляет уровни относительно начала текущего и предыдущего торгового дня с учётом часовых поясов. Индикатор рисует горизонтальные линии и текстовые метки прямо на графике цены, а также выводит информационный комментарий в левом верхнем углу.

Настройки программы

НастройкаОписание
GMTSettings Настройки GMT — Текстовый заголовок группы настроек часовых поясов.
LocalTimeZone Локальный часовой пояс — Часовой пояс локального сервера в часах.
DestTimeZone Целевой часовой пояс — Часовой пояс, в котором определяется начало торгового дня.
LinePlacement_ Описание режима размещения линий 0 — Текстовая подсказка для режима размещения линий: отдельная регулировка линий и меток.
LinePlacement__ Описание режима размещения линий 1 — Текстовая подсказка для режима размещения линий: все линии рядом со свечой.
LinePlacement___ Описание режима размещения линий 2 — Текстовая подсказка для режима размещения линий: все линии горизонтальные.
LinePlacement Размещение линий — Основной режим размещения горизонтальных линий на графике.
Show_1Daily_2FibonacciPivots Тип точек разворота — Выбор метода расчёта точек разворота: один ежедневный или два варианта Фибоначчи.
LabelsColor Цвет меток — Цвет текстовых меток уровней на графике.
LabelsFontSize Размер шрифта меток — Размер шрифта текстовых меток уровней.
ShowLevelPrices Показывать цены уровней — Отображение числовых значений цен рядом с метками уровней.
Preffered if you have fullscreen lines (ShowPricesInMiddle) Цены в середине экрана — Размещение ценовых меток в средней части экрана, предпочтительно при полноэкранных линиях.
ShowLabelsOnDaily Метки на дневном графике — Отображение меток уровней при работе на дневном таймфрейме.
LabelsLeft Метки слева — Размещение текстовых меток уровней слева на графике.
YesterdayLabelsRight Метки вчерашних уровней справа — Размещение меток вчерашних уровней справа на графике.
TodayLabelsRight Метки сегодняшних уровней справа — Размещение меток сегодняшних уровней справа на графике.
SeperateDayLines Разделительные линии дней — Отображение вертикальных разделительных линий начала и конца торгового дня.
ShowRange Показывать диапазон — Вывод информационного комментария с диапазоном цен вчера и сегодня.
LinePlacement0 Описание размещения 0 — Текстовая подсказка для размещения линий: линии от начала дня.
LinePlacement1 Описание размещения 1 — Текстовая подсказка для размещения линий: линии рядом со свечой.
LinePlacement2 Описание размещения 2 — Текстовая подсказка для размещения линий: горизонтальные линии.
ShowSupportResistance Показывать поддержку и сопротивление — Отображение уровней поддержки и сопротивления.
ShowPivotPoint Показывать точку разворота — Отображение центральной точки разворота.
LineStyleSR Стиль линий поддержки/сопротивления — Стиль отрисовки линий уровней поддержки и сопротивления.
LineThicknessSR Толщина линий поддержки/сопротивления — Толщина линий уровней поддержки и сопротивления.
LineStylePV Стиль линий точки разворота — Стиль отрисовки линии точки разворота.
LineThicknessPV Толщина линий точки разворота — Толщина линии точки разворота.
SNRLinePlacement Размещение линий поддержки/сопротивления — Режим начальной привязки горизонтальных линий уровней поддержки и сопротивления.
PivotLinePlacement Размещение линии точки разворота — Режим начальной привязки линии точки разворота.
SupportColor Цвет поддержки — Цвет линий уровней поддержки.
Exact Dark Red is 139,0,0 (ResistanceColor) Цвет сопротивления — Цвет линий уровней сопротивления.
PivotColor Цвет точки разворота — Цвет линии центральной точки разворота.
Shows Fibonacci levels inside yesterday's highs and lows. (ShowInnerFibs) Внутренние уровни Фибоначчи — Отображение уровней Фибоначчи внутри диапазона цен вчерашнего дня.
Shows Fibonacci levels outside yesterday's highs and lows. (ShowOuterFibs) Внешние уровни Фибоначчи — Отображение уровней Фибоначчи за пределами диапазона цен вчерашнего дня.
FiboLineThickness Толщина линий Фибоначчи — Толщина линий уровней Фибоначчи.
FiboLineStyle Стиль линий Фибоначчи — Стиль отрисовки линий уровней Фибоначчи.
FibosLinePlacementI Размещение внутренних линий Фибоначчи — Режим начальной привязки внутренних уровней Фибоначчи.
FibosLinePlacementO Размещение внешних линий Фибоначчи — Режим начальной привязки внешних уровней Фибоначчи.
FibColor Цвет Фибоначчи — Цвет линий уровней Фибоначчи.
ShowHighLow Показывать высокий и низкий — Отображение линий вчерашнего максимума и минимума.
ShowOpen Показывать открытие — Отображение линии цены открытия текущего дня.
LineStyleY Стиль линий высокий/низкий — Стиль отрисовки линий вчерашнего максимума и минимума.
LineThicknessY Толщина линий высокий/низкий — Толщина линий вчерашнего максимума и минимума.
LineStyleO Стиль линии открытия — Стиль отрисовки линии цены открытия.
LineThicknessO Толщина линии открытия — Толщина линии цены открытия.
YesterdayLinePlacement Размещение линий вчерашних уровней — Режим начальной привязки линий вчерашнего максимума и минимума.
OpenLinePlacement Размещение линии открытия — Режим начальной привязки линии цены открытия.
OpenColor Цвет открытия — Цвет линии цены открытия текущего дня.
YesterdayColor Цвет вчерашних уровней — Цвет линий вчерашнего максимума и минимума.
ShowMidPivots Показывать средние точки — Отображение средних уровней между линиями точек разворота.
MidLineStyle Стиль средних линий — Стиль отрисовки линий средних уровней.
MidLinePlacement Размещение средних линий — Режим начальной привязки линий средних уровней.
MidColor Цвет средних линий — Цвет линий средних уровней.
ShowQtrPivots Показывать квартальные точки — Отображение квартальных уровней между линиями точек разворота.
QtrLineStyle Стиль квартальных линий — Стиль отрисовки линий квартальных уровней.
QtrLinePlacement Размещение квартальных линий — Режим начальной привязки линий квартальных уровней.
QtrColor Цвет квартальных линий — Цвет линий квартальных уровней.
ShowCamarilla Показывать Камариллу — Отображение уровней Камариллы на основе вчерашнего диапазона.
ShowWeakerCamarilla Показывать слабую Камариллу — Отображение дополнительных слабых уровней Камариллы.
LineStyleC Стиль линий Камариллы — Стиль отрисовки линий уровней Камариллы.
CamarillaLinePlacement Размещение линий Камариллы — Режим начальной привязки линий уровней Камариллы.
WeakerCamarillaLinePlacement Размещение слабых линий Камариллы — Режим начальной привязки линий слабых уровней Камариллы.
CamColor Цвет Камариллы — Цвет линий уровней Камариллы.
Comment___ Подсказка SweetSpots — Текстовая подсказка о настройке SweetSpots.
ShowSweetSpots Показывать SweetSpots — Отображение уровней SweetSpots (округлённые значения цены).
SweetLineStyle Стиль линий SweetSpots — Стиль отрисовки линий уровней SweetSpots.
SweetLinePlacement Размещение линий SweetSpots — Режим начальной привязки линий уровней SweetSpots.
SweetColor Цвет SweetSpots — Цвет линий уровней SweetSpots.
Comment_ Подсказка толщины Камариллы — Текстовая подсказка о настройке толщины линий Камариллы и SweetSpots.
Comment__ Подсказка средних и квартальных точек — Текстовая подсказка о настройке средних и квартальных точек.
LineThickness Общая толщина линий — Толщина линий уровней Камариллы и SweetSpots.
DebugLogger Отладочный журнал — Включение вывода отладочной информации в журнал терминала.
Получить полный код

Поиск по коду файла

#property indicator_chart_window

extern string GMTSettings = "GMTSettings";
extern int LocalTimeZone= 0;
extern int DestTimeZone= 0;

extern string LinePlacement_ = "0 - Lines,labels seperately adjustable";
extern string LinePlacement__ = "1 - All lines next to candle";
extern string LinePlacement___ = "2 - All lines horizontal";
extern int LinePlacement = 0;

extern int Show_1Daily_2FibonacciPivots= 1;

extern color LabelsColor = Gray;
extern int LabelsFontSize = 8;
extern bool ShowLevelPrices = true;
extern bool ShowPricesInMiddle = false;  // Preffered if you have fullscreen lines
extern bool ShowLabelsOnDaily = false;
extern bool LabelsLeft = false;
extern bool YesterdayLabelsRight = false;
extern bool TodayLabelsRight = true;
extern bool SeperateDayLines = true;
extern bool ShowRange = true;
extern string LinePlacement0 = "0 - Lines since start of day";
extern string LinePlacement1 = "1 - Lines next to candle";
extern string LinePlacement2 = "2 - Lines horizontal";

extern bool ShowSupportResistance = true;
extern bool ShowPivotPoint = true;
extern int LineStyleSR= 0;
extern int LineThicknessSR= 1;
extern int LineStylePV= 0;
extern int LineThicknessPV= 1;
extern int SNRLinePlacement = 0;
extern int PivotLinePlacement = 0;
extern color SupportColor= DarkGreen;
extern color ResistanceColor= C'139,0,0'; //Exact Dark Red is 139,0,0
extern color PivotColor= C'30,95,205';

extern bool ShowInnerFibs= false;  // Shows Fibonacci levels inside yesterday's highs and lows.
extern bool ShowOuterFibs= false;  // Shows Fibonacci levels outside yesterday's highs and lows.
extern int FiboLineThickness= 1;
extern int FiboLineStyle= 2;
extern int FibosLinePlacementI= 1;
extern int FibosLinePlacementO= 1;
extern color FibColor= DarkSlateGray;

extern bool ShowHighLow = true;
extern bool ShowOpen = false;
extern int LineStyleY= 0;
extern int LineThicknessY= 1;
extern int LineStyleO= 2;
extern int LineThicknessO= 1;
extern int YesterdayLinePlacement= 0;
extern int OpenLinePlacement= 0;
extern color OpenColor= C'179,66,206';
extern color YesterdayColor= C'1,149,175';

extern bool ShowMidPivots = true;
extern int MidLineStyle= 2;
extern int MidLinePlacement= 0;
extern color MidColor= C'85,85,0';

extern bool ShowQtrPivots = false;
extern int QtrLineStyle= 2;
extern int QtrLinePlacement= 0;
extern color QtrColor= DarkSlateGray;

extern bool ShowCamarilla = false;
extern bool ShowWeakerCamarilla = false;
extern int LineStyleC= 2;
extern int CamarillaLinePlacement= 0;
extern int WeakerCamarillaLinePlacement= 0;
extern color CamColor= C'114,62,22';

extern string Comment___ = "SweetSpots keep false if spread < 1";
extern bool ShowSweetSpots = false;
extern int SweetLineStyle= 2;
extern int SweetLinePlacement= 1;
extern color SweetColor= C'130,18,130';

extern string Comment_ = "Thickness of Camarilla,Sweetspots";
extern string Comment__ = "MidPivots and QtrPivots";
extern int LineThickness= 1;

extern bool DebugLogger = false;

int TradingHoursFrom= 0;
int TradingHoursTo= 24;

int init()
{
      // код доступен только после оплаты
   }

int deinit()
{
   int obj_total= ObjectsTotal();

   for (int i= obj_total; i>=0; i--) {
      string name= ObjectName(i);

      if (StringSubstr(name,0,7)=="[PIVOT]") 
         ObjectDelete(name);
   }
   Comment(" ");   
   return(0);
}

int start()
{
      // код доступен только после оплаты
   }
   static datetime timelastupdate= 0;
   static datetime lasttimeframe= 0;

   datetime startofday= 0,
            startofyesterday= 0,
            startofyolines= 0,
            startofopen= 0,
            startofsnr= 0,
            startoffibos= 0,
            startoffibos2= 0,
            startofp= 0,
            startofqtr= 0,
            startofmsr= 0,
            startlabel= 0,
	    startlabel2= 0,
            startofcam= 0,
            startofcam2= 0,
            startofsweet= 0;

   double today_high= 0,
            today_low= 0,
            today_open= 0,
            yesterday_high= 0,
            yesterday_open= 0,
            yesterday_low= 0,
            yesterday_close= 0;

   int idxfirstbaroftoday= 0,
       idxfirstbarofyesterday= 0,
       idxlastbarofyesterday= 0;

   lasttimeframe= Period();
   timelastupdate= CurTime();

   if(Period() > 1440) {
      return(-1);
   }

   if (DebugLogger) {
      Print("Local time current bar:", TimeToStr(iTime(NULL, PERIOD_H1, 0)));
      Print("Dest  time current bar: ", TimeToStr(iTime(NULL, PERIOD_H1, 0)- (LocalTimeZone - DestTimeZone)*3600), ", tzdiff= ", LocalTimeZone - DestTimeZone);
   }

   ComputeDayIndices(LocalTimeZone, DestTimeZone, idxfirstbaroftoday, idxfirstbarofyesterday, idxlastbarofyesterday);

   startofday= Time[1];
   startofyesterday= iTime(NULL, PERIOD_H1, idxfirstbarofyesterday);
   startofyolines= iTime(NULL, PERIOD_H1, idxfirstbarofyesterday);
   startofopen= Time[1];
   startofsnr= Time[1];
   startoffibos= Time[1];
   startoffibos2= Time[1];
   startofp= Time[1];
   startofqtr= Time[1];
   startofmsr= Time[1];
   startofcam= Time[1]; 
   startofcam2= Time[1];
   startofsweet= Time[1];
   startlabel2= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startlabel= Time[0]; 

   if (Time[0] > iTime(NULL, PERIOD_H1, idxfirstbaroftoday)){   //This does not allow for lines to dissapear after a day change.
   startofday= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startofopen= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startofsnr= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startoffibos= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startoffibos2= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startofp= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startofqtr= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startofmsr= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startofcam= iTime(NULL, PERIOD_H1, idxfirstbaroftoday); 
   startofcam2= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   startofsweet= iTime(NULL, PERIOD_H1, idxfirstbaroftoday);
   }

   string space = "                                          ";
   string space2 = "    ";  //MD,QTR,CM,PV
   string space3 = "     "; //RS
   string space4 = "  ";    //Fib
   string space5 = "   ";   //Fib2 
   string space6 = "   ";  
   string space7 = "                   ";
   string space8 = "                   ";

   if (LabelsLeft){space = "                      ";space2 = "";space3 = "";space4 = "";space5 = "";space6 = "";} 
   if (ShowPricesInMiddle){space = "";space2 = "";space3 = "";space4 = "";space5 = "";space6 = "";}

   yesterday_high= -99999;  // not high enough to remain alltime high
   yesterday_low=  +99999;  // not low enough to remain alltime low

   for (int idxbar= idxfirstbarofyesterday; idxbar>=idxlastbarofyesterday; idxbar--) {

      if (yesterday_open==0)  // grab first value for open
         yesterday_open= iOpen(NULL, PERIOD_H1, idxbar);                      

      yesterday_high= MathMax(iHigh(NULL, PERIOD_H1, idxbar), yesterday_high);
      yesterday_low= MathMin(iLow(NULL, PERIOD_H1, idxbar), yesterday_low);

      yesterday_close= iClose(NULL, PERIOD_H1, idxbar);
   }

   today_open= iOpen(NULL, PERIOD_H1, idxfirstbaroftoday);  // should be open of today start trading hour

   today_high= -99999; // not high enough to remain alltime high
   today_low=  +99999; // not low enough to remain alltime low
   for (int j= idxfirstbaroftoday; j>=0; j--) {
      today_high= MathMax(today_high, iHigh(NULL, PERIOD_H1, j));
      today_low= MathMin(today_low, iLow(NULL, PERIOD_H1, j));
   }

   if(Period() < 1440) {

   if (SeperateDayLines==true) {
   double level= (yesterday_high + yesterday_low + yesterday_close) / 3;
   SetTimeLine("YesterdayStart", " ", idxfirstbarofyesterday, Black, level - 4*Point);
   SetTimeLine("YesterdayEnd", " ", idxfirstbaroftoday, Black, level - 4*Point);

   if (DebugLogger) 
      Print("Timezoned values: yo= ", yesterday_open, ", yc =", yesterday_close, ", yhigh= ", yesterday_high, ", ylow= ", yesterday_low, ", to= ", today_open);
   }
   }

   double p, q, d, r1,r2,r3,r4,r5, s1,s2,s3,s4,s5;

   d = (today_high - today_low);
   q = (yesterday_high - yesterday_low);
   p = (yesterday_high + yesterday_low + yesterday_close) / 3;

   if(Show_1Daily_2FibonacciPivots == 1)
   {   

   r1 = (2*p)-yesterday_low;
   r2 = p+(yesterday_high - yesterday_low);              //	r2 = p-s1+r1;
   r3 = (2*p)+(yesterday_high-(2*yesterday_low));

   s1 = (2*p)-yesterday_high;
   s2 = p-(yesterday_high - yesterday_low);              //	s2 = p-r1+s1;
   s3 = (2*p)-((2* yesterday_high)-yesterday_low);

   }

   if(Show_1Daily_2FibonacciPivots == 2)
   {
   r1 = p+ (q * 0.382);   
   r2 = p+ (q * 0.618);  
   r3 = p+q;  
   r4 = p+ (q * 1.618);
   r5 = p+ (q * 2.618);
   s1 = p- (q * 0.382);
   s2 = p- (q * 0.618);   
   s3 = p-q; 
   s4 = p- (q * 1.618);
   s5 = p- (q * 2.618); 
   }

   if (ShowHighLow) {
      if (YesterdayLabelsRight){startofyesterday = Time[0];space7 = "                                               ";}
      if (LabelsLeft){space7 = "                   ";}
      if (YesterdayLinePlacement==1){startofyolines = Time[1];}
      if (YesterdayLinePlacement==2){startofyolines = WindowFirstVisibleBar();}
      if (ShowPricesInMiddle){space7 = "";}

      SetLevel("YH",space7 + "YH", yesterday_high,  YesterdayColor, LineStyleY, LineThicknessY, startofyolines, startofyesterday);
      SetLevel("YL",space7 + "YL", yesterday_low,   YesterdayColor, LineStyleY, LineThicknessY, startofyolines, startofyesterday);
   }

   if (ShowOpen) {
      if (TodayLabelsRight){startofday = Time[0];space8 = "                                               ";}
      if (LabelsLeft){space8 = "                   ";}
      if (OpenLinePlacement==1){startofopen = Time[1];}
      if (OpenLinePlacement==2){startofopen = WindowFirstVisibleBar();}
      if (ShowPricesInMiddle){space8 = "";}  

      SetLevel("TO",space8 + "TO", today_open,      OpenColor, LineStyleO, LineThicknessO, startofopen, startofday);
   }

   if (ShowSweetSpots) {
      if (SweetLinePlacement==1){startofsweet = Time[1];}
      if (SweetLinePlacement==2){startofsweet = WindowFirstVisibleBar();}

      int ssp1, ssp2;
      double ds1, ds2;

      ssp1= Bid / Point;
      ssp1= ssp1 - ssp1%50;
      ssp2= ssp1 + 50;

      ds1= ssp1*Point;
      ds2= ssp2*Point;

      SetLevel("SweetSpot",space + DoubleToStr(ds1,Digits), ds1,  SweetColor, SweetLineStyle, LineThickness, startofsweet, startlabel);
      SetLevel("SweetSpot",space + DoubleToStr(ds2,Digits), ds2,  SweetColor, SweetLineStyle, LineThickness, startofsweet, startlabel);
   }

   if (ShowSupportResistance==true) {
      if (SNRLinePlacement==1){startofsnr = Time[1];}
      if (SNRLinePlacement==2){startofsnr = WindowFirstVisibleBar();}

      SetLevel("R5",space + space3 + "R5", r5,      ResistanceColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel); 
      SetLevel("R4",space + space3 + "R4", r4,      ResistanceColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel);
      SetLevel("R1",space + space3 + "R1", r1,      ResistanceColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel);
      SetLevel("R2",space + space3 + "R2", r2,      ResistanceColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel);
      SetLevel("R3",space + space3 + "R3", r3,      ResistanceColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel);

      SetLevel("S1",space + space3 + "S1", s1,      SupportColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel);
      SetLevel("S2",space + space3 + "S2", s2,      SupportColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel);
      SetLevel("S3",space + space3 + "S3", s3,      SupportColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel);
      SetLevel("S4",space + space3 + "S4", s4,      SupportColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel);
      SetLevel("S5",space + space3 + "S5", s5,      SupportColor, LineStyleSR, LineThicknessSR, startofsnr, startlabel);

   }

  if (ShowPivotPoint==true && Show_1Daily_2FibonacciPivots==1) {
      if (PivotLinePlacement==1){startofp = Time[1];}
      if (PivotLinePlacement==2){startofp = WindowFirstVisibleBar();}
      SetLevel("DPV",space + space2 + "DPV", p,    PivotColor, LineStylePV, LineThicknessPV, startofp, startlabel);
   }

  if (ShowPivotPoint==true && Show_1Daily_2FibonacciPivots==2) {
      if (PivotLinePlacement==1){startofp = Time[1];}
      if (PivotLinePlacement==2){startofp = WindowFirstVisibleBar();}
      SetLevel("FPV",space + space2 + "FPV", p,    PivotColor, LineStylePV, LineThicknessPV, startofp, startlabel);
   }

  if (ShowOuterFibs) {
      if (FibosLinePlacementO==1){startoffibos2 = Time[1];}
      if (FibosLinePlacementO==2){startoffibos2 = WindowFirstVisibleBar();}

      SetLevel("-62",space + space2 + "-62", yesterday_low - q*0.618,      FibColor, FiboLineStyle, FiboLineThickness, startoffibos2, startlabel);
      SetLevel("-38",space + space2 + "-38", yesterday_low - q*0.382,      FibColor, FiboLineStyle, FiboLineThickness, startoffibos2, startlabel);

      SetLevel("+38",space + space2 + "+38", yesterday_high + q*0.382,     FibColor, FiboLineStyle, FiboLineThickness, startoffibos2, startlabel);
      SetLevel("+62",space + space2 + "+62", yesterday_high +  q*0.618,    FibColor, FiboLineStyle, FiboLineThickness, startoffibos2, startlabel);

      SetLevel("-12",space + space2 + "-12", yesterday_low - q*0.118,      FibColor, FiboLineStyle, FiboLineThickness, startoffibos2, startlabel);
      SetLevel("-88",space + space2 + "-88", yesterday_low - q*0.882,      FibColor, FiboLineStyle, FiboLineThickness, startoffibos2, startlabel);

      SetLevel("+12",space + space2 + "+12", yesterd

Показано первые 50% кода (символов: 21631)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
2 163,10₽ ≈ $26.44