0

input int BuySell     = 2;    // 1-Only Buy 2-Only Sell 0-No Buy No Sell



//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double Ask=SymbolInfoDouble(NULL,SYMBOL_ASK);
   double Bid=SymbolInfoDouble(NULL,SYMBOL_BID);

 if(BuySell==0)
             {
               if(CountTrades()>0 && FindLastBuyPrice()-Ask>=Step*_Point) trade.Buy(lot,NULL,Ask,0,0,"");
               if(CountTrades()>0 && Bid-FindLastSellPrice()>=Step*_Point) trade.Sell(lot,NULL,Bid,0,0,"");
             }

   if(bars!=Bars(NULL,0))
     {
      if(BuySell==1 && (/*CountTrades()<1 ||*/ (CountTrades()>0 && FindLastBuyPrice()-Ask>=Step*_Point)))
        {
         trade.Buy(lot,NULL,Ask,0,0,"");   //buy
        }
      if(BuySell==2 && (/*CountTrades()<1 ||*/ (CountTrades()>0 && Bid-FindLastSellPrice()>=Step*_Point)))
        {
         trade.Sell(lot,NULL,Bid,0,0,"");   //sell
        }

      if(Lots()>=BigLot) lot=lot*Mnogitel;
      if(lot>MaxLots) lot=Lot;

      if(AllProfit()>Profit || AllProfit()<-Loss) {CloseAll(); lot=Lot;}
      bars=Bars(NULL,0);
     }

   Comment("\n Lots: ",Lots(),
           "\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+



avatar

ssg

  • 20 июня 2022, 17:59
0

input ulong Magic     = 123;  // Magic number

должен быть одинаковый у открытой позиции и у советника, или = 0 если позиция открыта «руками».
avatar

ssg

  • 20 июня 2022, 15:40
0

//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<50 && rsi>50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>50 && rsi<50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------



замените на

//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<K && rsi>K && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>K && rsi<K && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------

avatar

ssg

  • 13 июня 2022, 06:05
0
Найдите в

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

avatar

ssg

  • 13 июня 2022, 06:04
0
В настройки:

extern int K = 50;

//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<K && rsi>K && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>K && rsi<K && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------

avatar

ssg

  • 13 июня 2022, 04:14
0
Если в настройки добавить:

extern bool Reves        = false;

и дальше по коду:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   bool rez;
   double rsi = iRSI(NULL,0,RSI,0,Shift);//значение индикатора имеет значение от 0 до 100
   double rsi_1 = iRSI(NULL,0,RSI,0,Shift+1);//значение индикатора имеет значение от 0 до 100

   bool buy=rsi<Level; // сигнал на покупку - значение индикатора ниже уровня 30
   bool sell=rsi>100-Level;//сигнал на продажу - значение индикатора выше 100-30 = 70
   
   if(t!=Time[0] && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()))
     {
     if(Reves){
      if(sell && CountOrders(0)<1)
         PutOrder(0,Ask);
      if(buy && CountOrders(1)<1)
         PutOrder(1,Bid);
      }
     else{
      if(buy && CountOrders(0)<1)
         PutOrder(0,Ask);
      if(sell && CountOrders(1)<1)
         PutOrder(1,Bid);
      }
      t=Time[0];
     }
//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<50 && rsi>50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>50 && rsi<50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------
   if(!TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && CloseOn>0)
     {
      CloseAll();
     }
  }
//+------------------------------------------------------------------+

можно будет торговать используя по выбору реверс сигналов на открытие позиций, что добавит вариативности в торговле.
Кроме этого в приведенном коде реализована возможность одновременного существования позиций на покупку и на продажу.
Данный момент не был озвучен автором.
avatar

ssg

  • 11 июня 2022, 16:56
0
В настройки:

extern double SafePart   = 0.5;      // часть лота для закрытия 

дальше:


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   bool rez;
   double rsi = iRSI(NULL,0,RSI,0,Shift);//значение индикатора имеет значение от 0 до 100
   double rsi_1 = iRSI(NULL,0,RSI,0,Shift+1);//значение индикатора имеет значение от 0 до 100

   bool buy=rsi<Level; // сигнал на покупку - значение индикатора ниже уровня 30
   bool sell=rsi>100-Level;//сигнал на продажу - значение индикатора выше 100-30 = 70
   
   if(t!=Time[0] && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && CountTrades()<1)
     {
      if(buy)
         PutOrder(0,Ask);
      if(sell)
         PutOrder(1,Bid);
      t=Time[0];
     }
//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<50 && rsi>50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>50 && rsi<50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------
   if(!TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && CloseOn>0)
     {
      CloseAll();
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1){
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type || type==-1) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+

Пробуйте.
Функцию безубытка добавьте сами.
avatar

ssg

  • 11 июня 2022, 15:29
0
В коде все верно. Верхний уровень вычисляется, поэтому не вынесен в настройки.

   double rsi = iRSI(NULL,0,RSI,0,Shift);//значение индикатора имеет значение от 0 до 100

   bool buy=rsi<Level; // сигнал на покупку - значение индикатора ниже уровня 30
   bool sell=rsi>100-Level;//сигнал на продажу - значение индикатора выше 100-30 = 70



при желании можно так


extern int Level_b         = 30;       // уровень RSI 
extern int Level_s         = 70;       // уровень RSI 

и ниже

  bool buy=rsi<Level_b; // сигнал на покупку - значение индикатора ниже уровня 30
   bool sell=rsi>Level_s;//сигнал на продажу - значение индикатора выше  70



что тоже самое.
Единственное отличие это более гибкий выбор уровней.
avatar

ssg

  • 11 июня 2022, 07:07
0
Ну правильно. Пендосы его и подвинули. За свои рубли, которые в России, на Западе он ничего купить не мог, а свои баксы и евро он держал там где и жил «за бугром» в их западных банках, а не в своем банке. Пендосы счета заблокировали. А пароль к ним — громогласное порицание России. Высказав порицание до продажи своей доли, его могли «закрыть» пусть и заочно в России, а значит «прощай» возможность продать свою долю.
Логика простая-продам долю в России, деньги выведу, например в юанях или биткоинах, а затем «выскажу всю правду-матку о спецоперации » и мне разблокируют мои счета.Мне же пендосы обещали!
avatar

ssg

  • 10 июня 2022, 17:30
0
По Вашему Потанин это российский Илон Маск?
avatar

ssg

  • 10 июня 2022, 15:39
0
По моему суть такова:
-клиенты «по фиг», это проблемы клиентов, а также проблемы России и страховых фондов гарантирующие вклады клиентов, главное сохранить свои ЛИЧНЫЕ средства, земли, замки, яхты за рубежом.
И поэтому он сам от России подальше «подвинулся» побыстрее.

Или по Вашему:
Т.е. Тинькофф сам по себе ухудшает положение клиентов? Не по указке сверху?


потому, что он избранный банк, ни кому из двухсот банков не указали, а только ему.Персоонально?
avatar

ssg

  • 10 июня 2022, 14:14
+1
russian.rt.com/business/news/1013506-cb-komissiya-valyutnye-scheta

ЦБ изучает введение комиссий рядом банков по валютным счетам и при необходимости примет надзорные меры. Об этом говорится в сообщении на сайте регулятора.
ЦБ изучает введение рядом банков комиссий по валютным счетам
globallookpress.com © Konstantin Kokoshkin
«Ряд банков сообщил о планах введения комиссий за обслуживание валютных счетов граждан. Банк России, понимая озабоченность банков рисками работы с валютой, тем не менее считает, что банки не должны ухудшать условия обслуживания уже существующих клиентов», — отмечается в сообщении.

Ранее стало известно, что Тинькофф Банк с 23 июня вводит комиссию за обслуживание счетов в иностранной валюте.

С 8 июня Центробанк России повысил порог перевода средств за рубеж для физических лиц с $50 тыс. до $150 тыс. в месяц.
avatar

ssg

  • 10 июня 2022, 11:43
0
Как Вы себе это представляете?
Все более менее серьезные банки в РФ (читай все) открывают валютные счета без ограничения.Причем это указано в их Лицензиях от ЦБ.
Если есть повод, то счета могут блокировать и сегодня без «Закона» о котором Вы говорите.
Если Вас есть за что заблокировать, тогда попробуйте хранить финансы в «по подушкой».
Так что «включите голову», не поддавайтесь панике сами и не «вводите в блудную » остальных «слабонервных».*hi* 
avatar

ssg

  • 10 июня 2022, 06:40
0
Согласен.
avatar

ssg

  • 8 июня 2022, 19:14
0
Может поможет: www.mql5.com/ru/code/39082

//+------------------------------------------------------------------+
//|                                                   ScreenShot.mq4 |
//|                                Copyright 2022, cmillion@narod.ru |
//|                                               http://cmillion.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, cmillion@narod.ru"
#property link      "http://cmillion.ru"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property description "Индикатор записывает скриншот на каждой свече. The indicator records a screenshot on each candle"
extern ENUM_TIMEFRAMES TimeFrame  = 0;
//+------------------------------------------------------------------+
//| Индикатор записывает скриншот на каждой свече
//+------------------------------------------------------------------+
int OnInit()
  {
  return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
datetime TimeScren=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[])
  {
//---
  if (TimeScren!=iTime(NULL,TimeFrame,0))
  {
      TimeScren=iTime(NULL,TimeFrame,0);
      #ifdef __MQL4__
      int TekHour = Hour();
      int Minute  = Minute();
      int Seconds = Seconds();
      
      #endif
  
      #ifdef __MQL5__
      MqlDateTime tm;
      TimeCurrent(tm);
      int TekHour = tm.hour;
      int Minute  = tm.min;
      int Seconds = tm.sec;
      #endif
      string ScreenShotName="Screen"+"//"+TimeToString(TimeCurrent(),TIME_DATE)+(TekHour<10?"0":"")+IntegerToString(TekHour)+"-"+(Minute<10?"0":"")+IntegerToString(Minute)+"-"+(Seconds<10?"0":"")+IntegerToString(Seconds)+".gif";
      int WIDTH=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
      int HEIGHT=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);
      ChartScreenShot(0,ScreenShotName,WIDTH,HEIGHT,ALIGN_RIGHT);
  }
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
avatar

ssg

  • 8 июня 2022, 18:57
0
Если в настройки добавить

input double Mn           = 1;

И в функции расчета лота добавить Mn


//+------------------------------------------------------------------+
//|  Position Volume                                                 |
//+------------------------------------------------------------------+
double Lots()
  {
   double lots=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)/100000*Mn,2);
   return(lots);
  }
//+------------------------------------------------------------------+

тогда при Mn=1 лот будет по Т.З.
При Mn<1 можно будет более гибко варьировать размер лота.;) 
avatar

ssg

  • 8 июня 2022, 17:38
0
Наверное вот если записать:

  if(BuySell==0)
             {
               if(CountTrades()>0 && FindLastBuyPrice()-Ask>=Step*_Point) trade.Buy(lot,NULL,Ask,0,0,"");
               if(CountTrades()>0 && Bid-FindLastSellPrice()>=Step*_Point) trade.Sell(lot,NULL,Bid,0,0,"");
             }

тогда будет только подхватывать
avatar

ssg

  • 7 июня 2022, 19:22
0
Поясните в коде, что при

input int BuySell = 0;

тогда будет только подхватывать

avatar

ssg

  • 7 июня 2022, 18:58
0
Просто теперь у вас будет два советника, торгующих каждый по своей стратегии, но оба имеют одинаковые магики.
Первый торгует по своей стратегии, а второй усредняет существующие позиции.
Закрытие или по первой стратегии или по условию:

if(AllProfit()>Profit || AllProfit()<-Loss) {CloseAll(); lot=Lot;}

второго советника.
avatar

ssg

  • 7 июня 2022, 18:52