Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1033

 
abeiks:

Здравствуйте.

Сейчас время возвращается не совсем правильно. Например если время 12.04 , то мне возвращает время в таком формате 12.4 . Можете подсказать как правильно сделать эту функцию?

Ну так ведь Hour() и Minute() возвращают текущий час и текущую минуту последнего серверного времени на момент старта программы. И возвращаемые значения имеют тип int. А это просто целые числа. Значит вам нужно их ещё отформатировать. Например так:

string label=IntegerToString(Hour(),2,'0')+":"+IntegerToString(Minute(),2,'0');
 
artmedia70:

Ну так ведь Hour() и Minute() возвращают текущий час и текущую минуту последнего серверного времени на момент старта программы. И возвращаемые значения имеют тип int. А это просто целые числа. Значит вам нужно их ещё отформатировать. Например так:


Спасибо !
 
abeiks:
Спасибо !

Не за что. Если не секрет, зачем вам метка, показывающая время последнего запуска вашей программы - время в ней меняться не будет.

Просто праздное любопытство...

 

Добрый день! 

Подскажите пожалуйста, как правильно реализовать функцию ограничения 1 сделки на 1 бар (т.е. если на свече уже открывалась или закрывалась сделка, новая сделка на этой свече не открывался)

Находил много вариантов, но не могу разобраться как правильно вписать в код совы (т.е. какую часть в глобальные переменные а какую в условие открытия сделки)

вот например такой вариант:

int TekBar = -1; // Текущий бар.

if (TekBar == Bars)return(0); // На одном баре только одна сделка.
TekBar = Bars; // На одном баре только одна сделка.

{...}

какую часть этого скрипта нужно вставлять в каком месте кода совы?

 
DuKle:

Добрый день! 

Подскажите пожалуйста, как правильно реализовать функцию ограничения 1 сделки на 1 бар (т.е. если на свече уже открывалась или закрывалась сделка, новая сделка на этой свече не открывался)

Находил много вариантов, но не могу разобраться как правильно вписать в код совы (т.е. какую часть в глобальные переменные а какую в условие открытия сделки)

вот например такой вариант:

int TekBar = -1; // Текущий бар.

if (TekBar == Bars)return(0); // На одном баре только одна сделка.
TekBar = Bars; // На одном баре только одна сделка.

{...}

какую часть этого скрипта нужно вставлять в каком месте кода совы?

Вам нужно узнать была ли на баре под номером 0 открыта или закрыта последняя сделка.

Для этого вам нужно найти последнюю открытую сделку и последнюю закрытую сделку.

Посмотреть бар открытия последней открытой сделки и бар закрытия последней закрытой сделки.

Если хоть одно из этих значений (бар открытия последней открытой сделки или бар закрытия последней закрытой сделки) равно нулю, то открывать новые позиции нельзя.

И, да: это у вас не скрипт, это просто часть кода непоймичего. А в сову ничего вставлять не нужно: сова - ночной хищник, и пусть живёт птичка.

 

Здравствуйте! Помогите пожалуйста!

Есть идея, но не знаю, как  ее реализовать. А главное, не знаю, имеет ли эта задача решение. 

Суть следующая: Имеем индикатор, рисующий некую линию на графике на заданном количестве баров.

 Возможно ли сделать так, чтобы количество баров, на которых рисуется линия, можно было изменить перетаскиванием левого "конца" линии с помощью мыши? После перетаскивания индикатор должен запоминать новое количество баров, используемых для расчета. Вот пример индикатора, который хочу доработать

//+------------------------------------------------------------------+
//|                                                      Canal__.mq4 |
//+------------------------------------------------------------------+
//----------------------------------
#property indicator_chart_window
//----------------------------------
extern int Hours=20;
extern color col=Red;
//------------------
double lr,lr0,lrp;
double sx,sy,sxy,sx2,aa,bb;
int p,fs;
ulong sName;
int f,f0,f1;
double dh,dl,dh_1,dl_1,dh_2,dl_2;
int ai_1,ai_2,bi_1,bi_2;
double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;
double price_p1,price_p0,price_p2,price_01,price_00,price_02;
int p1,p0,p2,fp;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   p=Hours*60/Period();
   if(fs==0)
     {
      sName=TimeCurrent(); 
      fs=1;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   ObjectDelete("1"+(string)sName);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i,n;
//----
   if(f==1)
     {
      p1=iBarShift(Symbol(),Period(),(datetime)ObjectGet("1"+(string)sName,OBJPROP_TIME1));
      if(fp==0 && p!=p1) {p=p1; fp=1;}
     }
//----
   sx=0; sy=0; sxy=0; sx2=0;
   for(n=0; n<=p; n++)
     {
      sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2);
     }
   aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);
//----
   for(i=0; i<=p; i++)
     {
      lr=bb+aa*i;
      dh=High[i]-lr; dl=Low[i]-lr;
      //----
      if(i<p/2)
        {
         if(i==0)
           {
            dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;
           }
         if(dh>=dh_1) {dh_1=dh; ai_1=i;}
         if(dl<=dl_1) {dl_1=dl; bi_1=i;}
        }
      //----
      if(i>=p/2)
        {
         if(i==p/2)
           {
            dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;
           }
         if(dh>=dh_2) {dh_2=dh; ai_2=i;}
         if(dl<=dl_2) {dl_2=dl; bi_2=i;}
        }
     }
   lr0=bb; lrp=bb+aa*(i+p);
//===================================================
   if(MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;
   if(MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;
   if(MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2))
     {
      if(MathAbs(dh_1-dh_2)<MathAbs(dl_1-dl_2)) f=1; if(MathAbs(dh_1-dh_2)>=MathAbs(dl_1-dl_2)) f=2;
     }
//=================================================
   if(f==1)
     {
      for(n=0; n<=20; n++)
        {
         f1=0;
         for(i=0; i<=p; i++)
           {
            hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
            if(i==0 || i==p/2) dhm=0.0;
            if(High[i]-hai>dhm && i<p/2) {ai_1=i; f1=1;}
            if(High[i]-hai>dhm && i>=p/2) {ai_2=i; f1=1;}
           }
         if(f==0) break;
        }
      //----------------------------
      for(i=0; i<=p; i++)
        {
         hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
         dli=Low[i]-hai;
         if(i==0) dlm=0.0; if(dli<dlm) dlm=dli;
        }
      ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1);
      hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);
      //----------------------------
      price_p1=hap+dlm/2;
      price_01=ha0+dlm/2;
     }
//=================================================
   if(f==2)
     {
      for(n=0; n<=20; n++)
        {
         f1=0;
         for(i=0; i<=p; i++) 
           {
            lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1);
            if(i==0 || i==p/2) dlm=0.0;
            if(Low[i]-lai<dlm && i<p/2) {bi_1=i; f1=1;}
            if(Low[i]-lai<dlm && i>=p/2) {bi_2=i; f1=1;}
           }
         if(f==0) break;
        }
      //----------------------------
      for(i=0; i<=p; i++)
        {
         lai=Low[bi_1]*(i-bi_2)/(bi_1-bi_2)+Low[bi_2]*(i-bi_1)/(bi_2-bi_1);
         dhi=High[i]-lai;
         if(i==0) dhm=0.0; if(dhi>dhm) dhm=dhi;
        }
      la0=Low[bi_1]*(0-bi_2)/(bi_1-bi_2)+Low[bi_2]*(0-bi_1)/(bi_2-bi_1);
      lap=Low[bi_1]*(p-bi_2)/(bi_1-bi_2)+Low[bi_2]*(p-bi_1)/(bi_2-bi_1);
      //----------------------------------------------------------------
      price_p1=lap+dhm/2;
      price_01=la0+dhm/2;
     }
//=================================================================================== отрисовка линий
   ObjectCreate("1"+(string)sName,2,0,Time[p],price_p1,Time[0],price_01);
//-----------------------------------------------------------------
   ObjectSet("1"+(string)sName,OBJPROP_COLOR,col);
   ObjectSet("1"+(string)sName,OBJPROP_STYLE,STYLE_DASHDOT);
   ObjectSet("1"+(string)sName,OBJPROP_RAY,false);
//---------------------------------------------
   ObjectSet("1"+(string)sName,OBJPROP_TIME1,Time[p]);
   ObjectSet("1"+(string)sName,OBJPROP_PRICE1,price_p1);
   ObjectSet("1"+(string)sName,OBJPROP_TIME2,Time[0]);
   ObjectSet("1"+(string)sName,OBJPROP_PRICE2,price_01);
   f=1; p1=p; p0=p; p2=p; fp=0;
//===================================================================================
   return(0);
  }
//+------------------------------------------------------------------+
 
Night63:

Здравствуйте! Помогите пожалуйста!

Есть идея, но не знаю, как  ее реализовать. А главное, не знаю, имеет ли эта задача решение. 

Суть следующая: Имеем индикатор, рисующий некую линию на графике на заданном количестве баров.

 Возможно ли сделать так, чтобы количество баров, на которых рисуется линия, можно было изменить перетаскиванием левого "конца" линии с помощью мыши? После перетаскивания индикатор должен запоминать новое количество баров, используемых для расчета. Вот пример индикатора, который хочу доработать

Вам нужно в индикатор добавить OnChartEvent() и отслеживать событие изменения размера линии по её имени: CHARTEVENT_OBJECT_CHANGE. Пересчитывать новую длину линии в барах, и её новый размер использовать в качестве параметра для расчёта.
 
artmedia70:

Вам нужно узнать была ли на баре под номером 0 открыта или закрыта последняя сделка.

Для этого вам нужно найти последнюю открытую сделку и последнюю закрытую сделку.

Посмотреть бар открытия последней открытой сделки и бар закрытия последней закрытой сделки.

Если хоть одно из этих значений (бар открытия последней открытой сделки или бар закрытия последней закрытой сделки) равно нулю, то открывать новые позиции нельзя.

И, да: это у вас не скрипт, это просто часть кода непоймичего. А в сову ничего вставлять не нужно: сова - ночной хищник, и пусть живёт птичка.

Я принцип определения наличия сделки понимаю. я не знаю как это в коде реализовать :-(
 
DuKle:
Я принцип определения наличия сделки понимаю. я не знаю как это в коде реализовать :-(

Печально как всё...

Мне за вас сделать?

Для начала, и понимания в дальнейшем, почитайте ветку "Полезные функции от KimIV"

Код конечно избыточен, но для начала, и обучения - в самый раз.

 

Уважаемые специалисты-программисты по mql4/5 !

Обращается к Вам новичок, который изучил основы языка программирования и разработал советник для своего диплома!

У меня в дипломе есть глава под названием "Экономическая часть".

Если бы я разрабатывал какую либо программу для предприятия - здесь все ясно с экономической частью.

Но как быть в моем данном случае? Что вообще можно учитывать и какими путями мне идти!

Спасибо огромное!!!!

___________________________

Дорогу осилит идущий (с)