0
ЧАСТЬ 2
//+------------------------------------------------------------------+
   void  GAMBAR(int period)
   {
      double ResistanceValue=SNR(period,MODE_HIGH);
      double SupportValue=SNR(period,MODE_LOW);

      color warna1, warna2;
      if(period==60)    {warna1=P60R;   warna2=P60S;}
      if(period==240)    {warna1=P240R;   warna2=P240S;}
      if(period==1440)    {warna1=P1440R;   warna2=P1440S;}
      if(period==10080)    {warna1=P10080R;   warna2=P10080S;}

      string name;
      name = StringConcatenate("GIVONLY ",TF(period)," RESISTANCE LINE");
      GARIS(name, ResistanceValue, warna1);
      name = StringConcatenate(TF(period)," RESISTANCE");
      TULIS(name, ResistanceValue, warna1);
   
      name = StringConcatenate("GIVONLY ",TF(period)," SUPPORT LINE");
      GARIS(name, SupportValue, warna2);
      name = StringConcatenate(TF(period)," SUPPORT");
      TULIS(name, SupportValue, warna2);
   }
//+------------------------------------------------------------------+
   double SNR(int period, int mode)
   {
      bool FindLow=false, FindHigh=false;
      double snr, PassedLow=999, PassedHigh=0, HIGHEST, LOWEST;
      int i=1;
      while(!FindLow || !FindHigh)
         {
            if(HIGH(period,i)>PassedHigh) PassedHigh = HIGH(period,i);
            if(LOW(period,i)<PassedLow)   PassedLow = LOW(period,i);
            PassedHigh = MathMax(PassedHigh, HIGH(period,0));
            PassedLow  = MathMin(PassedLow, LOW(period,0));

            if(!FindHigh && HIGH(period,i)>=HIGH(period,i-1) && HIGH(period,i)>=HIGH(period,i+1) && HIGH(period,i)>=PassedHigh)
               {
                  HIGHEST = HIGH(period,i);
                  FindHigh=true;
               }   
            if(!FindLow && LOW(period,i)<=LOW(period,i-1) && LOW(period,i)<=LOW(period,i+1) && LOW(period,i)<=PassedLow)
               {
                  LOWEST = LOW(period,i);
                  FindLow=true;
               }   
            i++;
         }
      if(mode==MODE_HIGH)  snr=HIGHEST;
      if(mode==MODE_LOW)   snr=LOWEST;
      return(snr);
   }
//+------------------------------------------------------------------+
   string TF(int period)
      {
         string tf;
         if(period==60)      tf="H1";
         if(period==240)     tf="H4";
         if(period==1440)    tf="D1";
         if(period==10080)   tf="W1";
         return(tf);
      }
//+------------------------------------------------------------------+
   double HIGH(int period, int shift)
      {
         double hi=iHigh(Symbol(), period, shift);
         return(hi);
      }   
//+------------------------------------------------------------------+
   double LOW(int period, int shift)
      {
         double lo=iLow(Symbol(), period, shift);
         return(lo);
      }   
//+------------------------------------------------------------------+
   void TULIS(string NamaTeks, double value, color warna)
      {
         string ValueTeks = StringConcatenate(NamaTeks," ",DoubleToStr(value,Digits));
         double Value=value;
         if(value<Bid)  Value=value+Supply_Demand_Area*Point;
         ObjectCreate(NamaTeks, OBJ_TEXT, 0, Time[35], Value);
         ObjectSetText(NamaTeks, StringSubstr(NamaTeks,0,4), 10, "Tahoma", warna);
         ObjectMove(NamaTeks, 0,  Time[35], Value);
      }
//+------------------------------------------------------------------+
   void GARIS(string name, double value, color warna)
      {
         ObjectCreate(name, OBJ_HLINE, 0,  Time[0], value);
         ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
         ObjectSet(name, OBJPROP_COLOR, warna);
         ObjectMove(name, 0,  Time[0], value);
      }

Надо код в индикаторе заменить полностью на этот код из 2 частей по порядку и скомпилировать файл.
Индикатор будет считать значения не на каждом тике, а на каждой новой свече.
avatar

Oxy

  • 11 марта 2015, 17:29
0
Код индикатора. ЧАСТЬ 1
//+------------------------------------------------------------------+
//|                                              Givonly_SnR_SnD.mq4 |
//|                                                          Givonly |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Givonly"
#property link      "http://www.kgforexworld.com & http://oxy.opentraders.ru/bio/"
#property indicator_chart_window

extern bool SHOW_H1=true;
extern bool SHOW_H4=true;
extern bool SHOW_D1=true;
extern bool SHOW_W1=true;
extern int Supply_Demand_Area=10;
extern color SupportColor = DodgerBlue;
extern color ResistanceColor = Red;
extern color P60R=LightGray;
extern color P60S=LightGray;
extern color P240R=LightGray;
extern color P240S=LightGray;
extern color P1440R=LightGray;
extern color P1440S=LightGray;
extern color P10080R=LightGray;
extern color P10080S=LightGray;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//----
   if(ObjectFind("H1 RESISTANCE")==0) ObjectDelete("H1 RESISTANCE");
   if(ObjectFind("H4 RESISTANCE")==0) ObjectDelete("H4 RESISTANCE");
   if(ObjectFind("D1 RESISTANCE")==0) ObjectDelete("D1 RESISTANCE");
   if(ObjectFind("W1 RESISTANCE")==0) ObjectDelete("W1 RESISTANCE");
   if(ObjectFind("H1 SUPPORT")==0) ObjectDelete("H1 SUPPORT");
   if(ObjectFind("H4 SUPPORT")==0) ObjectDelete("H4 SUPPORT");
   if(ObjectFind("D1 SUPPORT")==0) ObjectDelete("D1 SUPPORT");
   if(ObjectFind("W1 SUPPORT")==0) ObjectDelete("W1 SUPPORT");
   if(ObjectFind("GIVONLY H1 RESISTANCE LINE")==0) ObjectDelete("GIVONLY H1 RESISTANCE LINE");
   if(ObjectFind("GIVONLY H4 RESISTANCE LINE")==0) ObjectDelete("GIVONLY H4 RESISTANCE LINE");
   if(ObjectFind("GIVONLY D1 RESISTANCE LINE")==0) ObjectDelete("GIVONLY D1 RESISTANCE LINE");
   if(ObjectFind("GIVONLY W1 RESISTANCE LINE")==0) ObjectDelete("GIVONLY W1 RESISTANCE LINE");
   if(ObjectFind("GIVONLY H1 SUPPORT LINE")==0) ObjectDelete("GIVONLY H1 SUPPORT LINE");
   if(ObjectFind("GIVONLY H4 SUPPORT LINE")==0) ObjectDelete("GIVONLY H4 SUPPORT LINE");
   if(ObjectFind("GIVONLY D1 SUPPORT LINE")==0) ObjectDelete("GIVONLY D1 SUPPORT LINE");
   if(ObjectFind("GIVONLY W1 SUPPORT LINE")==0) ObjectDelete("GIVONLY W1 SUPPORT LINE");
   if(ObjectFind("H1 SUPPLY AREA")==0) ObjectDelete("H1 SUPPLY AREA");
   if(ObjectFind("H4 SUPPLY AREA")==0) ObjectDelete("H4 SUPPLY AREA");
   if(ObjectFind("D1 SUPPLY AREA")==0) ObjectDelete("D1 SUPPLY AREA");
   if(ObjectFind("W1 SUPPLY AREA")==0) ObjectDelete("W1 SUPPLY AREA");
   if(ObjectFind("H1 DEMAND AREA")==0) ObjectDelete("H1 DEMAND AREA");
   if(ObjectFind("H4 DEMAND AREA")==0) ObjectDelete("H4 DEMAND AREA");
   if(ObjectFind("D1 DEMAND AREA")==0) ObjectDelete("D1 DEMAND AREA");
   if(ObjectFind("W1 DEMAND AREA")==0) ObjectDelete("W1 DEMAND AREA");
//----
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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(prev_calculated==0 || (prev_calculated>0 && prev_calculated<rates_total)) {
      if(SHOW_H1) GAMBAR(60);
      if(SHOW_H4) GAMBAR(240);
      if(SHOW_D1) GAMBAR(1440);
      if(SHOW_W1) GAMBAR(10080);
      if(Supply_Demand_Area>0) {
        if(SHOW_H1)    SND(60);
        if(SHOW_H4)    SND(240);
        if(SHOW_D1)    SND(1440);
        if(SHOW_W1)    SND(10080);
      }
    }
    return(rates_total);
  }
//+------------------------------------------------------------------+
   void  SND(int period)
      {
         string name;
         name = StringConcatenate(TF(period)," SUPPLY AREA");
         double atas, bawah;
         atas = SNR(period,MODE_HIGH);
         bawah= atas-Supply_Demand_Area*Point;
         bool ada=false;
         if(   (SNR(period,MODE_HIGH)==SNR(60,MODE_HIGH) && period>60 && SHOW_H1)
            || (SNR(period,MODE_HIGH)==SNR(240,MODE_HIGH) && period>240 && SHOW_H4)
            || (SNR(period,MODE_HIGH)==SNR(1440,MODE_HIGH) && period>1440 && SHOW_D1)
            || (SNR(period,MODE_HIGH)==SNR(10080,MODE_HIGH) && period>10080 && SHOW_W1)
           )   ada=true;
         if(!ada) {
            ObjectCreate(name,OBJ_RECTANGLE,0,0,0);
            ObjectSet(name,OBJPROP_TIME1,Time[0]);
            ObjectSet(name,OBJPROP_TIME2,Time[Bars-1]);
            ObjectSet(name,OBJPROP_COLOR,ResistanceColor);
            ObjectSet(name,OBJPROP_PRICE1,atas);
            ObjectSet(name,OBJPROP_PRICE2,bawah);
            ObjectMove(name,0,Time[0],atas);
            ObjectMove(name,1,Time[Bars-1],bawah);
            }
         name = StringConcatenate(TF(period)," DEMAND AREA");
         bawah= SNR(period,MODE_LOW);
         atas = bawah+Supply_Demand_Area*Point;
         ada=false;
         if(   (SNR(period,MODE_LOW)==SNR(60,MODE_LOW) && period>60 && SHOW_H1)
            || (SNR(period,MODE_LOW)==SNR(240,MODE_LOW) && period>240 && SHOW_H4)
            || (SNR(period,MODE_LOW)==SNR(1440,MODE_LOW) && period>1440 && SHOW_D1)
            || (SNR(period,MODE_LOW)==SNR(10080,MODE_LOW) && period>10080 && SHOW_W1)
           )   ada=true;
         if(!ada) {
            ObjectCreate(name,OBJ_RECTANGLE,0,0,0);
            ObjectSet(name,OBJPROP_TIME1,Time[0]);
            ObjectSet(name,OBJPROP_TIME2,Time[Bars-1]);
            ObjectSet(name,OBJPROP_COLOR, SupportColor);
            ObjectSet(name,OBJPROP_PRICE1,bawah);
            ObjectSet(name,OBJPROP_PRICE2,atas);
            ObjectMove(name,0,Time[0],bawah);
            ObjectMove(name,1,Time[Bars-1],atas);
            }
      }
avatar

Oxy

  • 11 марта 2015, 17:28
0
Здесь два советника: opentraders.ru/downloads/617/
Советник Falt_Exp1 — переносит SL в безубыток.
Советник Falt_Exp2 — тралит SL.
avatar

Oxy

  • 11 марта 2015, 16:53
0
Lagoda, комментарии слева вверху появились. Там я показываю значение mfi. (так как я не поняла, что вам конкретно хочется знать)
Файл в базе: opentraders.ru/downloads/627/
avatar

Oxy

  • 11 марта 2015, 16:32
0
Sell и buy могут быть открыты параллельно:
opentraders.ru/downloads/627/
Комментарии слева вверху появились, делала их для Lagoda, но вам они тоже буду полезны — там я указала значение mfi при открытии позиции.
avatar

Oxy

  • 11 марта 2015, 16:30
+2
Пока сделана часть: opentraders.ru/downloads/628/
Входные параметры:
TicketOrder       = 1;          // Номер ордера, на основании которого идет усреднение
K_order           = 0.15;       // Часть объема усредняемого ордера (от 0 до 1)
Step_limit_orders = 100;        // Шаг лимитных ордеров
Max_num_LO        = 5;          // Max количество лимитных ордеров             
Slippage          = 30;         // Проскальзывание цены
MagicNumber       = 5677772;    // Идентификатор ордера - обязательно нужен для лимитных ордеров
// должен отличаться от магиков уже открытых ордеров! 


Итак, у нас есть buy ордер (1 лот), указываем его тикет. Выставляется один buy limit.
Этот buy limit сработал:
— для всех сработавших limit модифицируются take profit по формуле, написанной вами ранее (у всех сработавших ордеров один take profit),
— и выставляется следующий buy limit (но не более max количества).
Если сработал take profit, то удаляются не сработавшие limit ордера.
И закрывается часть лота (0,15 лот) у первоначального buy ордера.
_______________________________________________________________________________________

С sell ордером тоже самое. У нас есть sell ордер (1 лот), указываем его тикет. Выставляется один sell limit.
Этот sell limit сработал:
— для всех сработавших limit модифицируются take profit по формуле, написанной вами ранее (у всех сработавших ордеров один take profit),
— и выставляется следующий sell limit (но не более max количества).
Если сработал take profit, то удаляются не сработавшие limit ордера.
И закрывается часть лота (0,15 лот) у первоначального sell ордера.
_______________________________________________________________________________________
Stop loss-а пока нет.
Проверить можно только на демо.
avatar

Oxy

  • 11 марта 2015, 15:55
0
Написала: прогоните индикатор в тестере и сами убедитесь, как он лихо перерисовывает.
avatar

Oxy

  • 11 марта 2015, 12:39
0
Индикатор этот перерисовывает (сильно). Прогоните его в тестере и сами увидите.
Плюс посмотрите эту ветку: zakaz.opentraders.ru/22110.html
avatar

Oxy

  • 11 марта 2015, 11:24
0
Сделаю, как поняла, а потом будем править. Не раньше конца недели.
avatar

Oxy

  • 11 марта 2015, 11:16
0
Fargo, я не умею догадываться ;)  Написано было: «Чтобы туда можно было их вносить»
В случае вещания в комментариях действий советника — никогда не понимала надобности комментариев, когда можно открыть и посмотреть вкладку «эксперты» и «журнал»
avatar

Oxy

  • 11 марта 2015, 11:13
0
«Если долго мучится, что-нибудь получится»
Крайне неточное утверждение.
Это как мне всегда говорили: Тише едешь — дальше будешь.
А кто-нибудь в курсе, что это только часть поговорки. Кто-нибудь в курсе, как она на самом деле звучит?
Вот так: Тише едешь — дальше будешь до того места, куда едешь.
И таких поговорок много.
Повторение — мать учение, утешение дураков.
avatar

Oxy

  • 11 марта 2015, 11:03
0
Я не знаю, как пользователь может вносить комментарии в работающий советник. Ну разве что открыть блокнот и туда записывать.
avatar

Oxy

  • 11 марта 2015, 10:59
0
AgentWeb, индикатор MFI перерисовывает, и в момент открытия позиции он был выше уровня 55. Если условие сделать, что на предыдущей свече индикатор должен быть выше уровня 55 — то на предыдущей свече уже не перерисует.
По второму условию, правильно ли я поняла, что одновременно может быть открыто две сделки — buy и sell?
avatar

Oxy

  • 11 марта 2015, 10:58
0
Когда-то тоже по-разному анализировала пару евро/бакс. Гистограммы строила в экселе. Много статистической работы было проделано в начале моего пути. Не смогу ответить — пошло ли мне это на пользу.
avatar

Oxy

  • 10 марта 2015, 23:20
0
добавлены MFI и трал:
opentraders.ru/downloads/627/
Индикатор MFI использовать только тот, что в архиве! (я его чуть дописала)
avatar

Oxy

  • 10 марта 2015, 23:13
0
Добавлю этот индикатор.

Необходимо добавить трал, так как некоторые сделки не полностью оправданы
Вы планируете
Тейкпрофит 7 пунктов
и
Стоплосс должен быть фиксированным в 5 пунктов
о каком трале может быть речь при таких мизерных параметрах?
avatar

Oxy

  • 10 марта 2015, 22:04
0
Что вы подразумеваете под:
если цена цепляет обе отлоги но при этом ордера не вылетают по тэйку либо стопу, ордера переходят без закрытия и модификации на следующую свечу
или
если цена зацепила один из ордеров но не дошла до противоположного ордера, то на следующую свечу переносится этот сработанный ордер как есть, а второй несработанный ордер удаляется
Как могут переноситься сработавшие ордера? *think* 

Не понимаю, расшифруйте:
стоп назначается всегда ордеру или ордерам, как процент просадки от депозита
Формула нужна, мне самой её не выдумать.
avatar

Oxy

  • 10 марта 2015, 21:55
0
Жду исходник индикатора (расширение mq4) Money Flow Index
avatar

Oxy

  • 10 марта 2015, 21:42