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

strategyschedule.mq4

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

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

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

О программе

StrategySchedule — торговый советник для MetaTrader 4, предоставляющий графический интерфейс прямо на графике для ручного управления торговыми операциями. На чарте создаются кнопки для размещения рыночных ордеров BUY и SELL, отложенных ордеров BUY LIMIT, BUY STOP, SELL LIMIT и SELL STOP, а также кнопки для удаления ордеров и закрытия всех позиций. Рядом располагаются поля ввода для параметров Take Profit, Stop Loss, расстояния и лота.

Советник использует три отдельных магических числа (Magic1, Magic2, Magic3) для различения обычных, стоповых и лимитных ордеров, что позволяет управлять ими независимо. Встроенная функция AdviserRegistration отображает на графике актуальную информацию об аккаунте: баланс, эквити, свободный маржин, прибыль, а также количество открытых BUY и SELL позиций.

Обработка событий реализована через OnChartEvent, который отслеживает нажатия кнопок на графике и запускает соответствующие торговые операции через класс Launch с использованием OrderSend. Класс Delete обеспечивает удаление отложенных ордеров по указанному магическому числу. При каждом тике OnTick обновляет отображение торговой информации.

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

НастройкаОписание
Slippage Проскальзывание — Допустимое проскальзывание в пунктах при выполнении торговых операций.
Обычные ордера (Magic1) Обычные ордера — Магическое число для обычных рыночных ордеров BUY и SELL.
Стоповые ордера (Magic2) Стоповые ордера — Магическое число для стоповых отложенных ордеров BUY STOP и SELL STOP.
Лимитные ордера (Magic3) Лимитные ордера — Магическое число для лимитных отложенных ордеров BUY LIMIT и SELL LIMIT.
Points Цвет заливки — Цвет заливки (фона) объектов ввода и меток на графике.
Edge Цвет границы — Цвет границ объектов ввода и меток на графике.
Colour Цвет текста — Цвет текста в полях ввода и информационных меток на графике.
Получить полный код

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

#property version   "1.00"
#property strict

extern int Slippage     = 50;
extern int Magic1       = 123111;// Обычные ордера
extern int Magic2       = 124111;// Стоповые ордера
extern int Magic3       = 125111;// Лимитные ордера

extern color Points = clrBlack;
extern color Edge   = clrDarkBlue;
extern color Colour = clrWhite;

string ID;
string AC,Font2="Balans",Font = "Times New Roman";

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

void OnDeinit(const int reason)
  {
      ObjectsDeleteAll();

  }

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

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
      Launch lau;
      Delete del;
      AdviserRegistration();

      double tpb;//      = TPBuy;
      double tpblimit;// = TPBuyLimit;
      double tpbstop;//  = TPBuyStop;
      double tps;//      = TPSell;
      double tpslimit;// = TPSellLimit;
      double tpsstop;//  = TPSellStop;
      double tpgbs;//    = TPBuyGrid;
      double tpgbl;//    = TPBuyGrid;

      double slb;//      = TPBuy;
      double slblimit;// = TPBuyLimit;
      double slbstop;//  = TPBuyStop;
      double sls;//      = TPSell;
      double slslimit;// = TPSellLimit;
      double slsstop;//  = TPSellStop;
      double slgss;//    = TPBuyGrid;
      double slgsl;//    = TPBuyGrid;

      double odbuylimit;//  = OpeningDistanceBuyLimit;
      double odbuystop;//   = OpeningDistanceBuyStop;
      double odselllimit;// = OpeningDistanceSellLimit;
      double odsellstop;//  = OpeningDistanceSellStop;

      int slip=Slippage;

      double sp1=double(ObjectGetString(0,"SE1",OBJPROP_TEXT));//tp
      double sp2=double(ObjectGetString(0,"SE2",OBJPROP_TEXT));//sl
      double sp3=double(ObjectGetString(0,"SE3",OBJPROP_TEXT));//dis
      double sp4=double(ObjectGetString(0,"SE4",OBJPROP_TEXT));//setka
      double sp5=double(ObjectGetString(0,"SE5",OBJPROP_TEXT));//количество
      double sp6=double(ObjectGetString(0,"SE6",OBJPROP_TEXT));//lot

   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      string clickedChartObject=sparam;

      if(clickedChartObject=="A")
        {
            tpb=sp1;
            slb=sp2;

            if(!sp2 && !sp1)
               int ticket=lau.Buy(sp6,slip,Magic1);
             else
            if(!sp1)
               int ticket=lau.sBuy(sp6,slip,slb,Magic1);
             else
            if(!sp2)
               int ticket=lau.Buy(sp6,slip,tpb,Magic1);
             else
               int ticket=lau.Buy(sp6,slip,slb,tpb,Magic1);
        }

      if(clickedChartObject=="B")
        {
            tps=sp1;
            sls=sp2;

            if(!sp2 && !sp1)
               int ticket=lau.Sell(sp6,slip,Magic2);
             else
            if(!sp1)
               int ticket=lau.sSell(sp6,slip,sls,Magic1);
             else
            if(!sp2)
               int ticket=lau.Sell(sp6,slip,tps,Magic1);
             else
               int ticket=lau.Sell(sp6,slip,sls,tps,Magic1);
        }

      if(clickedChartObject=="C")
        {
            tpbstop=sp1;
            odbuystop=sp3;
            slbstop=sp2;

             double size=sp3;
             int i=0,ticket;
             bool puskt=false;
             bool pusks=false;

             if(!sp2)
               puskt=true;
             if(!sp1)
               pusks=true;

             tpgbs=sp1;//+size;
             tpgbl=sp1+(size*2);
             slgss=sp2-size;//(size*2);
             slgsl=sp2;

             if(sp5>0 && pusks==true &&  puskt==true)
                while(i<sp5)
                {

                  ticket=lau.BuyStop(
                  sp6,size,slip,Magic2);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(pusks==true)
                while(i<sp5)
                {

                  ticket=lau.sBuyStop(
                  sp6,size,slip,slgss,Magic2);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(puskt==true)
                while(i<sp5)
                {

                  ticket=lau.BuyStop(
                  sp6,size,slip,tpgbs,Magic2);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
                while(i<sp5)
                {

                  ticket=lau.BuyStop(
                  sp6,size,slip,slgss,tpgbs,Magic2);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }

            if(!sp5 && !sp2 && !sp1)
               int tick=lau.BuyStop(
               sp6,odbuystop,slip,Magic2);
             else
            if(!sp1 && !sp5)
               int tick=lau.sBuyStop(
               sp6,odbuystop,slip,slbstop,Magic2);
             else
            if(!sp2 && ! sp5)
               int tick=lau.BuyStop(
               sp6,odbuystop,slip,tpbstop,Magic2);
             else
            if(!sp5)
               int tick=lau.BuyStop(
               sp6,odbuystop,slip,slbstop,tpbstop,Magic2);
        }

      if(clickedChartObject=="D")
        {
            tpsstop=sp1;
            odsellstop=sp3;
            slsstop=sp2;

             double size=sp3;
             int i=0,ticket;
             bool puskt=false;
             bool pusks=false;

             if(!sp2)
               puskt=true;
             if(!sp1)
               pusks=true;

             tpgbs=sp1;
             tpgbl=sp1+(size*2);
             slgss=sp2-size;//+(size*2);
             slgsl=sp2;

             if(sp5>0 && pusks==true && puskt==true)
                while(i<sp5)
                {
                  ticket=lau.SellStop(
                  sp6,size,slip,Magic2);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(pusks==true)
                while(i<sp5)
                {
                  ticket=lau.sSellStop(
                  sp6,size,slip,slgss,Magic2);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(puskt==true)
                while(i<sp5)
                {
                  ticket=lau.SellStop(
                  sp6,size,slip,tpgbs,Magic2);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
                while(i<sp5)
                {
                  ticket=lau.SellStop(
                  sp6,size,slip,slgss,tpgbs,Magic2);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }           

            if(!sp5 && !sp2 && !sp1)
               int tick=lau.SellStop(
               sp6,odsellstop,slip,Magic2);
             else
            if(!sp1 && !sp5)
               int tick=lau.sSellStop(
               sp6,odsellstop,slip,slsstop,Magic2);
             else
            if(!sp2 && !sp5)
               int tick=lau.SellStop(
               sp6,odsellstop,slip,tpsstop,Magic2);
             else
            if(!sp5)
               int tick=lau.SellStop(
               sp6,odsellstop,slip,slsstop,tpsstop,Magic2);
        }

      if(clickedChartObject=="E")
        {
            tpblimit=sp1;
            odbuylimit=sp3;
            slblimit=sp2;

             double size=sp3;
             int i=0,ticket;
             bool puskt=false;
             bool pusks=false;

             if(!sp2)
               puskt=true;
             if(!sp1)
               pusks=true;

             tpgbs=sp1;
             tpgbl=sp1-size-(sp4/2);//+(size*2);
             slgss=sp2+(size*2);
             slgsl=sp2;

             if(sp5>0 && pusks==true &&  puskt==true)
                while(i<sp5)
                {

                  ticket=lau.BuyLimit(
                  sp6,size,slip,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(pusks==true)
                while(i<sp5)
                {

                  ticket=lau.sBuyLimit(
                  sp6,size,slip,slgsl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(puskt==true)
                while(i<sp5)
                {

                  ticket=lau.BuyLimit(
                  sp6,size,slip,tpgbl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
                while(i<sp5)
                {

                  ticket=lau.BuyLimit(
                  sp6,size,slip,slgsl,tpgbl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }

            if(!sp5 && !sp2 && !sp1)
               int tick=lau.BuyLimit(
               sp6,odbuylimit,slip,Magic3);
             else
            if(!sp1 && !sp5)
               int tick=lau.sBuyLimit(
               sp6,odbuylimit,slip,slblimit,Magic3);
             else
            if(!sp2 && !sp5)
               int tick=lau.BuyLimit(
               sp6,odbuylimit,slip,tpblimit,Magic3);
             else
            if(!sp5)
               int tick=lau.BuyLimit(
               sp6,odbuylimit,slip,slblimit,tpblimit,Magic3);
        }

      if(clickedChartObject=="F")
        {
            tpslimit=sp1;
            odselllimit=sp3;
            slslimit=sp2;

             double size=sp3;
             int i=0,ticket;
             bool puskt=false;
             bool pusks=false;

             if(!sp2)
               puskt=true;
             if(!sp1)
               pusks=true;

             tpgbs=sp1;
             tpgbl=sp1-size-(sp4/2);//+(size*2);
             slgss=sp2+(size*2);
             slgsl=sp2;

             if(sp5>0 && pusks==true && puskt==true)
                while(i<sp5)
                {
                  ticket=lau.SellLimit(
                  sp6,size,slip,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(pusks==true)
                while(i<sp5)
                {
                  ticket=lau.sSellLimit(
                  sp6,size,slip,slgsl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(puskt==true)
                while(i<sp5)
                {
                  ticket=lau.SellLimit(
                  sp6,size,slip,tpgbl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
                while(i<sp5)
                {
                  ticket=lau.SellLimit(
                  sp6,size,slip,slgsl,tpgbl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }

            if(!sp5 && !sp2 && !sp1)
               int tick=lau.SellLimit(
               sp6,odselllimit,slip,Magic3);
               else
            if(!sp1 && !sp5)
               int tick=lau.sSellLimit(
               sp6,odselllimit,slip,slslimit,Magic3);
               else
            if(!sp2 && !sp5)
               int tick=lau.SellLimit(
               sp6,odselllimit,slip,tpslimit,Magic3);
             else
            if(!sp5)
               int tick=lau.SellLimit(
               sp6,odselllimit,slip,slslimit,tpslimit,Magic3);
        }

      if(clickedChartObject=="P1")
        {
             double size=sp3;
             int i=0,ticket;
             bool puskt=false;
             bool pusks=false;

             if(!sp2)
               puskt=true;
             if(!sp1)
               pusks=true;

             tpgbs=sp1;
             tpgbl=sp1+(size*2);
             slgss=sp2+(size*2);
             slgsl=sp2;

             if(pusks==true &&  puskt==true)
                while(i<sp5)
                {

                  ticket=lau.BuyStop(
                  sp6,size,slip,Magic2);

                  ticket=lau.BuyLimit(
                  sp6,size,slip,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(pusks==true)
                while(i<sp5)
                {

                  ticket=lau.sBuyStop(
                  sp6,size,slip,slgss,Magic2);

                  ticket=lau.sBuyLimit(
                  sp6,size,slip,slgsl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(puskt==true)
                while(i<sp5)
                {

                  ticket=lau.BuyStop(
                  sp6,size,slip,tpgbs,Magic2);

                  ticket=lau.BuyLimit(
                  sp6,size,slip,tpgbl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
                while(i<sp5)
                {

                  ticket=lau.BuyStop(
                  sp6,size,slip,slgss,tpgbs,Magic2);

                  ticket=lau.BuyLimit(
                  sp6,size,slip,slgsl,tpgbl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
        }

      if(clickedChartObject=="P2")
        {
             double size=sp3;
             int i=0,ticket;
             bool puskt=false;
             bool pusks=false;

             if(!sp2)
               puskt=true;
             if(!sp1)
               pusks=true;

             tpgbs=sp1;
             tpgbl=sp1+(size*2);
             slgss=sp2+(size*2);
             slgsl=sp2;

             if(pusks==true && puskt==true)
                while(i<sp5)
                {
                  ticket=lau.SellStop(
                  sp6,size,slip,Magic2);

                  ticket=lau.SellLimit(
                  sp6,size,slip,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(pusks==true)
                while(i<sp5)
                {
                  ticket=lau.sSellStop(
                  sp6,size,slip,slgss,Magic2);

                  ticket=lau.sSellLimit(
                  sp6,size,slip,slgsl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
             if(puskt==true)
                while(i<sp5)
                {
                  ticket=lau.SellStop(
                  sp6,size,slip,tpgbs,Magic2);

                  ticket=lau.SellLimit(
                  sp6,size,slip,tpgbl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
             else
                while(i<sp5)
                {
                  ticket=lau.SellStop(
                  sp6,size,slip,slgss,tpgbs,Magic2);

                  ticket=lau.SellLimit(
                  sp6,size,slip,slgsl,tpgbl,Magic3);

                  tpgbs=tpgbs-sp4;
                  tpgbl=tpgbl+sp4;
                  slgss=slgss+sp4;
                  slgsl=slgsl-sp4;

                  size=size+sp4;
                  puskt=false;
                  pusks=false;
                  i++;
                }
        }

        if(clickedChartObject=="D1")
        {
            int x=0;
            if(sp5>0)
               while(x<sp5)
               {
                  del.DeleteBuyStop(Magic2);
                  del.DeleteBuyLimit(Magic3);
                  x++;
               }
               else
               {
                  del.DeleteBuyStop(Magic2);
                  del.DeleteBuyLimit(Magic3);
               }
        }

        if(clickedChartObject=="D2")
        {
            int x=0;
            if(sp5>0)
               while(x<sp5)
               {
                  del.DeleteSellStop(Magic2);
                  del.DeleteSellLimit(Magic3);
                  x++;
               }
               else
               {
                  del.DeleteSellStop(Magic2);
                  del.DeleteSellLimit(Magic3);
               }
        }

        if(clickedChartObject=="D3")
        {
            int x=0;

                  CloseAll();

        }

      ChartRedraw();// принудительно перерисуем все объекты на графике
     }

  }

void CloseAll(int ot=-1)
  {
   bool cl=1;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() /*&&
         OrderMagicNumber()==magic*/)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),50,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),50,White);
              }
           }
        }
     }
  }

bool ButtonCreate2(const long              chart_ID=0,
                  const string            name="Button", 
                  const int               sub_window=0,
                  const long               x=0, 
                  const long               y=0,
                  const int               width=50,
                  const int               height=18,
                  const string            text="Button", 
                  const string            font="Arial",
                  const int               font_size=10,//10
                  const color             clr=clrBlack,
                  const color             clrfon=clrLightGray, 
                  const bool              state=false) 
  {
   if (ObjectFind(chart_ID,name)==-1)
   {
      ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
      ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
      ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
      ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
      ObjectSetInteger(chart_ID,name,OBJP

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

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

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

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

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

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

Стоимость полного кода
3 031,60₽ ≈ $37.05