초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1269

 
Kira27 :

나는 당신이 제안한 것에서 내가 할 수있는 모든 것을 시도했지만 침을 비틀었지만 여전히 MT5의 선을 한 가지 색상으로 그립니다. 그리고 MT4에서는 지체 없이 규범을 다시 그립니다.

분명히 모든 것이 시도된 것은 아닙니다.

알렉세이 빅토로프:

개체의 이름을 바꾼 후 아직 액세스할 수 없을 가능성이 매우 높습니다. 이름을 바꾼 후에 ChartRedraw를 넣어 볼 수 있습니다. 도움이 되지 않으면 시퀀스를 어떻게든 다르게 빌드해야 합니다.

추신; 또 다른 옵션: 먼저 이름을 sparam으로 다시 칠한 다음 이름을 바꿉니다.

어떤 이유로 CHARTEVENT_OBJECT_CREATE 이벤트는 쥐가 차트에 닿은 직후에 고려되며 개체 생성이 끝난 후에는 고려되지 않습니다. 그리고 섬유의 다른 끝의 가격은 동일합니다. 따라서 개체 생성 후 다시 칠해야 합니다.

그리고 한 가지 더 주의할 점: 레벨을 칠합니까 아니면 피브(fib)의 메인 라인을 칠합니까?

다음은 세 가지 옵션입니다.

첫 번째.

 bool endCreate;
string newName;
/*******************Expert initialization function*******************/
int OnInit ()
 {
   ChartSetInteger ( ChartID (), CHART_EVENT_OBJECT_CREATE , true );
   return ( INIT_SUCCEEDED );
 } /******************************************************************/

/************************Expert tick function************************/
void OnTick ()
 {
   if (endCreate)
   {
     double    Level_0= ObjectGetDouble ( 0 , newName, OBJPROP_PRICE , 0 );
     double    Level_1= ObjectGetDouble ( 0 , newName, OBJPROP_PRICE , 1 );
     if (Level_0 > Level_1)
       ObjectSetInteger ( 0 , newName, OBJPROP_LEVELCOLOR , 1 , clrDeepSkyBlue );
     else
       ObjectSetInteger ( 0 , newName, OBJPROP_LEVELCOLOR , 1 , clrYellow );
    endCreate = false ;
   }
 } /******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent ( const int id,         // идентификатор события
                   const long & lparam,   // параметр события типа long
                   const double & dparam, // параметр события типа double
                   const string & sparam   // параметр события типа string
                 )
 {
   if (id == CHARTEVENT_OBJECT_CREATE )
   {
     ulong timeCreate = ObjectGetInteger ( 0 , sparam, OBJPROP_CREATETIME ); //  получим время создания объекта
    newName = "Fibo " + string (timeCreate); //  сформируем новое имя объекта
     ObjectSetString ( 0 , sparam, OBJPROP_NAME , newName);   //  переименуем объект
    endCreate = true ;
   }
 } /******************************************************************/

두번째.

 /*******************Expert initialization function*******************/
int OnInit ()
 {
   ChartSetInteger ( ChartID (), CHART_EVENT_OBJECT_CREATE , true );
   return ( INIT_SUCCEEDED );
 } /******************************************************************/

/************************Expert tick function************************/
void OnTick ()
 {

 } /******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent ( const int id,         // идентификатор события
                   const long & lparam,   // параметр события типа long
                   const double & dparam, // параметр события типа double
                   const string & sparam   // параметр события типа string
                 )
 {
   string newName;  
   if (id == CHARTEVENT_OBJECT_CREATE )
   {
     ulong timeCreate = ObjectGetInteger ( 0 , sparam, OBJPROP_CREATETIME ); //  получим время создания объекта
    newName = "Fibo " + string (timeCreate); //  сформируем новое имя объекта
     ObjectSetString ( 0 , sparam, OBJPROP_NAME , newName);   //  переименуем объект
   }
   if (id == CHARTEVENT_OBJECT_DRAG )
   {
     double    Level_0= ObjectGetDouble ( 0 , newName, OBJPROP_PRICE , 0 );
     double    Level_1= ObjectGetDouble ( 0 , newName, OBJPROP_PRICE , 1 );
     if (Level_0 > Level_1)
       ObjectSetInteger ( 0 , newName, OBJPROP_LEVELCOLOR , 1 , clrDeepSkyBlue );
     else
       ObjectSetInteger ( 0 , newName, OBJPROP_LEVELCOLOR , 1 , clrYellow );
   }
 } /******************************************************************/

세 번째.

 /*******************Expert initialization function*******************/
int OnInit ()
 {
   ChartSetInteger ( ChartID (), CHART_EVENT_OBJECT_CREATE , true );
   return ( INIT_SUCCEEDED );
 } /******************************************************************/

/************************Expert tick function************************/
void OnTick ()
 {
 } /******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent ( const int id,         // идентификатор события
                   const long & lparam,   // параметр события типа long
                   const double & dparam, // параметр события типа double
                   const string & sparam   // параметр события типа string
                 )
 {
   if (id == CHARTEVENT_OBJECT_DRAG )
   {
     ulong timeCreate = ObjectGetInteger ( 0 , sparam, OBJPROP_CREATETIME ); //  получим время создания объекта
     string newName = "Fibo " + string (timeCreate); //  сформируем новое имя объекта
     ObjectSetString ( 0 , sparam, OBJPROP_NAME , newName);   //  переименуем объект
     double    Level_0= ObjectGetDouble ( 0 , newName, OBJPROP_PRICE , 0 );
     double    Level_1= ObjectGetDouble ( 0 , newName, OBJPROP_PRICE , 1 );
     if (Level_0 > Level_1)
       ObjectSetInteger ( 0 , newName, OBJPROP_LEVELCOLOR , 1 , clrDeepSkyBlue );
     else
       ObjectSetInteger ( 0 , newName, OBJPROP_LEVELCOLOR , 1 , clrYellow );
   ChartRedraw (); 
  }
 } /******************************************************************/


 
SanAlex :

포인트를 가져 와서 다른 버퍼로 전송하기 위해 하나의 지표에서 알고리즘을 구성하는 방법.

- 추세선을 그립니다. (그림처럼)

------------------------------------------

나는 이미 타이핑하여 모든 것을 시도했지만 그것들은 그려졌지만 어딘가 이해할 수없는 지점에 있습니다.

-------------------------------------------------- -------------------------------------------------- -

표시기를 부착합니다. 작동 중입니다. 이 선만 적용할 수 없습니다.

누군가가 추세선의 고정 지점에 대한 기사로 나를 안내할 것입니다.

-- 지금 내가 할 수 있는 것은 그것들을 그리는 것뿐이며, 어떤 점에서 명확하지 않습니다.

EURUSDH4

-------------------------------------------------- -------

이와 같은 것을 작성해야 합니다. 아마도?

 //--- найдем максимальное и минимальное значение графика
   double max_price= ChartGetDouble ( 0 , CHART_PRICE_MAX );
   double min_price= ChartGetDouble ( 0 , CHART_PRICE_MIN );
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for ( int i= 0 ;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars- 1 )/ 100 ;
   int p1=InpPrice1*(accuracy- 1 )/ 100 ;
 //--- количество видимых баров в окне графика
   int bars=( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS );
//--- размер массива price
   int accuracy= 1000 ;
//--- массивы для хранения значений дат и цен, которые будут использованы
//--- для установки и изменения координат точек привязки линии
   datetime date[];
   double    price[];
//--- выделение памяти
   ArrayResize (date,bars);
   ArrayResize (price,accuracy);
//--- заполним массив дат
   ResetLastError ();
   if ( CopyTime ( Symbol (), Period (), 0 ,bars,date)==- 1 )
     {
       Print ( "Не удалось скопировать значения времени! Код ошибки = " , GetLastError ());
       return ;
     }
//--- заполним массив цен
//--- найдем максимальное и минимальное значение графика
   double max_price= ChartGetDouble ( 0 , CHART_PRICE_MAX );
   double min_price= ChartGetDouble ( 0 , CHART_PRICE_MIN );
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for ( int i= 0 ;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars- 1 )/ 100 ;
   int d2=InpDate2*(bars- 1 )/ 100 ;
   int p1=InpPrice1*(accuracy- 1 )/ 100 ;
   int p2=InpPrice2*(accuracy- 1 )/ 100 ;
//--- создадим линию тренда
   if (!TrendCreate( 0 ,InpName, 0 ,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
      InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
     {
       return ;
     }



--------------------

내가 올바른 길을 가고 있다고 말해줘???

파일:
2.mq5  82 kb
 
SanAlex :

누군가가 추세선의 고정 지점에 대한 기사로 나를 안내할 것입니다.

-- 지금 내가 할 수 있는 것은 그것들을 그리는 것뿐이며, 어떤 점에서 명확하지 않습니다.

-------------------------------------------------- -------

이와 같은 것을 작성해야 합니다. 아마도?

--------------------

내가 올바른 길을 가고 있다고 말해줘???

추세선 은 2개의 포인트를 기반으로 합니다. 이것은 가격 데이터 또는 다른 지표의 데이터입니다. 프랙탈을 기반으로 하는 예시입니다. 그건 그렇고, 이미 알고 계시죠.)

https://www.mql5.com/ru/code/29210

Line through two fractals
Line through two fractals
  • www.mql5.com
cm BASKET Советник управляющий счетом. Показывает какие пары инструментов сейчас торгуются на данном счете. Показывает прибыль полученную по каждой паре за определенное время. Помогает переключаться между множества открытых окон... Virtual Trailing Stop 2
 
VVT :

추세선 은 2개의 포인트를 기반으로 합니다. 이것은 가격 데이터 또는 다른 지표의 데이터입니다. 프랙탈을 기반으로 하는 예시입니다. 그건 그렇고, 이미 알고 계시죠.)

https://www.mql5.com/ru/code/29210

하나의 표시기를 원했지만 작동하지 않았습니다. 그러나 당신이 제안한 이것을 통해 나는 전에도 했습니다.

- 두 개의 지표를 통해 그렇게 해야 했습니다.

여기 무슨 일이 있었는지

GBPUSDM30 고토프

--------------------------

고맙다는 말을 잊었다! - 감사해요!!!

 
SanAlex :

하나의 표시기를 원했지만 작동하지 않았습니다. 그러나 당신이 제안한 이것을 통해 나는 전에도 했습니다.

- 두 개의 지표를 통해 그렇게 해야 했습니다.

여기 무슨 일이 있었는지

--------------------------

고맙다는 말을 잊었다! - 감사해요!!!

글쎄, 그것들을 결합하면 하나의 지표에서 많은 다른 개체를 만들 수 있습니다)

 
Alexey Viktorov :

분명히 모든 것이 시도된 것은 아닙니다.

어떤 이유로 CHARTEVENT_OBJECT_CREATE 이벤트는 쥐가 차트에 닿은 직후에 고려되며 개체 생성이 끝난 후에는 고려되지 않습니다. 그리고 섬유의 다른 끝의 가격은 동일합니다. 따라서 객체 생성 후 다시 칠해야 합니다.


어떻게 정의했습니까? 논리적으로?

그리고 한 가지 더 주의할 점: 레벨을 칠합니까 아니면 피브(fib)의 메인 라인을 칠합니까?


예, 일부 다른 변형에서 추세선을 다시 그리려고 했습니다.)))

다음은 세 가지 옵션입니다.

첫 번째.

두번째.

세 번째.


옵션을 주셔서 감사합니다! 당신의 예를보고 논리적으로 생각하는 법을 배웁니다)))

코딩에 관심이 있습니까, 아니면 거래에도 관심이 있습니까? 내 말은, 거래에 대한 주제가 된 지 얼마나 되었습니까? 난 이미 12살이야

 
Kira27 :

옵션을 주셔서 감사합니다! 당신의 예를보고 논리적으로 생각하는 법을 배웁니다)))

코딩에 관심이 있습니까, 아니면 거래에도 관심이 있습니까? 내 말은, 거래에 대한 주제가 된 지 얼마나 되었습니까? 난 이미 12살이야

나는 항상 그렇게 "친절"하지 않습니다. 발작 중에만… 그래서, 제 예에서 배울 것이 거의 없습니다. 거래에서 나는 거의 똑같습니다.

 
Alexey Viktorov :

나는 항상 그렇게 "친절"하지 않습니다. 발작 중에만… 그래서, 제 예에서 배울 것이 거의 없습니다. 거래에서 나는 거의 똑같습니다.

글쎄요, 잘 모르겠습니다. 예제를 통해 더 나은 프로그래밍 방법과 기술을 배우고 있습니다. 그리고 나는 당신의 예에서 많은 것을 얻습니다. MQL5에는 MQL4와 같은 튜토리얼이 없는 것이 유감입니다. 튜토리얼이 끝나면 로봇이 포함된 파일에 대해 단계별로 분석됩니다 .

 
Alexey Viktorov :

거래에서 나는 거의 똑같습니다.

시장 변동의 본질을 이미 알고 있습니까? 나는 나에게 보이는 것처럼 이미 알고 있었다)))) 특정 시간 동안 작업할 수 있기 때문에 프로그래밍해야 합니다. 그런 다음 느슨해져서 게임을 만듭니다.))) 이제 모든 자산이 명확해집니다. 나))) S&P는 특히 나에게 있어 기술적이고 역동적인 것을 좋아합니다.))

 
VVT :

글쎄, 그것들을 결합하면 하나의 지표에서 많은 다른 개체를 만들 수 있습니다)

그것이 제가 통일하고 싶었던 것입니다. 나는 지금 일주일 동안 찌르는 방법으로 고통 받고 있습니다. 작동하지 않습니다.

- 두 번째 지표를 통해 더 잘 작동하는 것 같습니다. 과거 지점과 선 자체는 보이지 않고 시장 진입 이 결정되는 지점과 수준만 남습니다.

----------------

여기에 두 개의 지표가 있습니다 - 이것은 하나의 전체입니다 (이것은 제 초안입니다 - 나는 이름이 있고 4 개의 지표 어셈블리를 변경하지 않았습니다)

사유: