정사각형 또는 직사각형 그리기. 정말 도움이 필요해요... - 페이지 2

 

안녕하세요. 정말 도움이 필요하고 어떻게 해야할지 모르겠습니다. 어려운 도움이 아니라면.

매월 첫 번째 막대를 표시할 지표가 필요합니다. 월 수를 선택하여 월말까지 높은 가격과 낮은 가격에 대한 선을 그립니다.

예.(3개월. 라인마킹은 3개월). 또는 볼 샘플.

미리 감사드립니다.

 

다음은 열린 + 및 - 20 포인트에서 날짜를 표시하는 샘플 스크립트입니다. 마찬가지로 월을 정의하고 이에 따라 이번 달의 고가와 저가를 정의할 수 있습니다.

 /********************************************************************\
                                                           20-20.mq4 |
                                                            Viktorov |
                                                   v4forex@yandex.ru |
\********************************************************************/
#property copyright "Viktorov"
#property link        "v4forex@yandex.ru"
#property version    "1.00"

MqlDateTime mqlDateTime;
MqlRates     mqlRates[ 1 ];
/********************Script program start function*******************/
void OnStart ()
{
   double point = _Digits % 2 == 0 ? _Point : _Point * 10 ;
   datetime dt = ChartTimeOnDropped ();
     TimeToStruct ( ChartTimeOnDropped (), mqlDateTime);
     if ( CopyRates ( _Symbol , PERIOD_D1 , dt, 1 , mqlRates) < 0 )
       Print ( "" );
       string objName = TimeToString (mqlRates[ 0 ].time, TIME_DATE );
         ObjectCreate ( 0 , objName, OBJ_TREND , 0 , mqlRates[ 0 ].time, mqlRates[ 0 ].open, mqlRates[ 0 ].time+ PeriodSeconds ( PERIOD_D1 ), mqlRates[ 0 ].open);
         ObjectSetInteger ( 0 , objName, OBJPROP_RAY_RIGHT , false );
       ObjectCreate ( 0 , objName+ "+20" , OBJ_TREND , 0 , mqlRates[ 0 ].time, mqlRates[ 0 ].open+ 20 *point, mqlRates[ 0 ].time+ PeriodSeconds ( PERIOD_D1 ), mqlRates[ 0 ].open+ 20 *point);
       ObjectSetInteger ( 0 , objName+ "+20" , OBJPROP_RAY_RIGHT , false );
     ObjectCreate ( 0 , objName+ "-20" , OBJ_TREND , 0 , mqlRates[ 0 ].time, mqlRates[ 0 ].open- 20 *point, mqlRates[ 0 ].time+ PeriodSeconds ( PERIOD_D1 ), mqlRates[ 0 ].open- 20 *point);
     ObjectSetInteger ( 0 , objName+ "-20" , OBJPROP_RAY_RIGHT , false );
   Comment (mqlRates[ 0 ].open, "\n"
         , objName, "\n"
         , sizeof (mqlDateTime), "\n"
         );
} /*******************************************************************/
 
AlexeyVik :

다음은 열린 + 및 - 20 포인트에서 날짜를 표시하는 샘플 스크립트입니다. 마찬가지로 월을 정의하고 이에 따라 이번 달의 고가와 저가를 정의할 수 있습니다.

정말 감사합니다. 힘들지만 효과가 있는 것 같습니다.
 

AlexeyVik: 귀하의 응답에 감사드립니다.

제가 철자를 제대로 썼는지 모르겠습니다. 이것에 대해 필요합니다. 그림

지표에서 이것을 구현하는 방법을 돕거나 제안해 주시면 대단히 감사하겠습니다.

저는 프로그래밍이 처음입니다.

수직선이 올바르게 그려집니다.

나는 "수평선과 원을 높고 낮은 첫 번째 촛불에 묶는 방법"을 이해하지 못합니다.

도움을 주시면 감사하겠습니다.

 

CopyRates() 함수와 MqlRates 구조에 대한 문서를 더 자세히 읽어보십시오. 그들의 도움으로 위시리스트를 구현하는 데 필요한 모든 데이터를 얻을 수 있습니다.

그런 다음 효과가 있었던 것과 효과가 없는 것을 보여줍니다. 그렇지 않으면, 도움 요청은 귀하를 위한 요청으로 읽습니다. 직설적이라 죄송합니다.

 

다음은 소스 코드입니다. 개선하는 데 도움을 주시면 감사하겠습니다. 매월 첫째 주의 최고가와 최저가를 찾아야 합니다.

//+------------------------------------------------------------------+

#property copyright ""

#property link      ""


#property indicator_chart_window

   

    //---  Внешние Глобальные переменные 

extern int     TF = 43200;               //--- Через сколько баров рисуются линии (На каком Т/Ф)

extern int     barsToProcess = 5;        //--- Кол-во отображаемых периодов (линий) 

extern string  TimeFrames = "M1,5,15,30; 60H1; 240H4; 1440D1; 10080W1; 43200MN.";  //--- Подсказка кол-во боров в Т/Ф


    //---  Глобальные переменные    

string    Name_Line;         //--- Имя Вертикальных уровней


//double    Price_H = High[0]; //--- Макс цены  

//double    Price_L = Low[0];  //--- Мин цены




//+------------------------------------------------------------------+

int init()

  {  

   //--- 

        return(0);

  }

//+------------------------------------------------------------------+

int deinit()

  {

   int i;  

         for (i=0; i<Bars; i++)                                    //--- Выбираем все установленные объекты  

           {

              ObjectDelete(Name_Line + DoubleToStr(i,0));        //--- Удаляем все установленные линии

           }       

   return(0);

  }

//+------------------------------------------------------------------+

int start()

{                  

int counted_bars = IndicatorCounted();     //--- перем counted_bars = функц.  Возвращает количество баров

int limit;                                 //--- переменная  старт кол-во баров. Линии рисуем о по всем барам

int i=0;                                   //--- переменная i = 0 обнуление

   

if(counted_bars > 0) counted_bars --;      //--- последний посчитанный бар будет пересчитан 

  //--- основной цикл 

  limit = Bars - counted_bars;         

  for(i = 0; i < limit; i ++)

      {  

         //+-----  Выбираем количество линий отображаемых на экране 

         if(limit > barsToProcess)                                     //--- Если кол-во линий > Кол-ву отображаемых периодов (линий) 

         {

           limit = barsToProcess;                                      //--- Тогда устанавливаем Кол-во отображаемых периодов (линий)

           Name_Line = "Time_VLine M" + TF + " "+DoubleToStr(i,0);      //--- И присваиваем имя с соответствующими параметрами 

 //+------------------------ Рисуем линии -----------------------------------------------------+                 

             while (i<limit)                                           //--- Пока есть линии в окне терминала. Или пока висит индикатор в окне терминала.                        

             {   

               datetime t_Line  = iTime(Symbol(),TF,i);                 //--- В ПЕРЕМ t_Line Будет Присваиваться значение времени открытия бара


                   {

                      ObjectCreate (Name_Line + DoubleToStr(i,0),OBJ_VLINE,0,t_Line,0);         //--- Создаём обьект вертикальную линию

                      ObjectSet    (Name_Line + DoubleToStr(i,0),OBJPROP_STYLE,2);              //--- Со стилем

                      ObjectSet    (Name_Line + DoubleToStr(i,0),OBJPROP_COLOR,DimGray);        //--- Со цветом  

                      ObjectSet    (Name_Line + DoubleToStr(i,0),OBJPROP_WIDTH,0);              //--- С  толщиной

                      ObjectSet    (Name_Line + DoubleToStr(i,0),OBJPROP_BACK,0);               //--- С типом отображения. Объект на заднем плане

 //+-----------------------------------------------------------------------------+                 

                   }

                    i++;

             }

          }

      }

      

return(0);


}


 
     if ( CopyRates ( _Symbol , PERIOD_W1 , dt, 1 , mqlRates) < 0 )         //--- Если бросили скрипт на выбранную свечку

       Print ( "" );

내 코드에서 이것은 촛불이 아니라 하루입니다. 당신의 경우에는 일주일입니다.

이것으로부터 우리는 선을 그릴 시간을 얻습니다 . 아마도 한 달이 필요할 것입니다. 월의 시작 시간입니다. 그러나 그것은 한 주의 시작과 거의 일치하지 않습니다. 따라서 여기에서 첫 번째 주를 계산하는 방법을 생각해낼 필요가 있습니다.

         ObjectCreate ( 0 , objName, OBJ_TREND , 0 , mqlRates[ 0 ].time + PERIOD_MN1 , mqlRates[ 0 ].high, mqlRates[ 0 ].time + PeriodSeconds ( PERIOD_MN1 ) , mqlRates[ 0 ].high); 

차이를 느껴보세요. 아직 mql4에는 큰 차이가 없지만 어떤 변경 사항이 우리를 기다리고 있을지 누가 알겠습니까...

//--- Что здесь не так, при построении линии по лоу. На графике её нет. И Ошибки компиляции тоже нет? 

 //--- НО по отдельности всё работает.     

트렌드 이름에 주의하십시오.

 //----- Для чего нужен этот блок если линия отрисовывается на графике и без него   

나는 3개의 라인을 가지고 있으므로 3개의 함수와 3개의 라인 이름이 있습니다.

 
도와주셔서 감사합니다. 하지만 어떻게든 이해할 수 없습니다.
 

그렇다면 대답은 단 하나의 질문이다.

//--- Что здесь не так, при построении линии по лоу. На графике её нет. И Ошибки компиляции тоже нет? 

 //--- НО по отдельности всё работает.     

여기에는 같은 줄 이름이 있지만 서로 달라야 합니다.

게시물을 삭제하고 수정한 이유는 무엇입니까?

 

당신은 오랫동안 대답하지 않았으며 어리석은 질문에 대답하지 않았다고 생각하여 삭제했습니다.