지난 36개 고점 중 최고 고점에 H_line 그리기 - 페이지 2

 

나는 stoch close에 대해 신경 쓰지 않으므로 현재 K %로 충분합니다.

검사 개체에 대한 코드:

 int i, ot= ObjectsTotal ()- 1 ;
string id= ObjectName (i);

for (i=ot;i>= 0 ;i--)
{
   if ( StringSubstr (id, 0 , 7 )== "tomato " )
      {
       if ( StringSubstr (id, 7 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
       if ( StringSubstr (id, 7 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
      }
   if ( StringSubstr (id, 0 , 6 )== "olive " )
      {
       if ( StringSubstr (id, 6 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
      }  
}

이것은 96개의 양초 이후에 id 라인을 삭제합니다. 내가 필요로

내가 지금해야 할 일은 하나의 토마토 라인이 이미 차트에있는 경우 ea가 새로운 토마토 라인을 그리는 것을 막는 것입니다.

추가할 생각입니다

 if ( StringSubstr (id, 7 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ..............
         }

....... = 중지하고 처음부터 (그러나 여전히 올리브 조건을 읽으십시오)

지금 코드:

 int start()
  {
/////////// K% over >75 or under <25 (no waiting for close)
double stoch;
stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );

double high_price,low_price;
int high_nr,low_nr;
high_nr= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 );  
high_price= High [high_nr];
low_nr= iLowest ( NULL , 0 , MODE_LOW , 34 , 2 );
low_price= Low [low_nr];
datetime H= Time [high_nr];
string Hdate = TimeToStr (H, TIME_DATE | TIME_MINUTES );
datetime L= Time [low_nr];
string Ldate = TimeToStr (L, TIME_DATE | TIME_MINUTES );


/////////////////////////////////////////////////////////////////////////////////
//---
 int i, ot= ObjectsTotal ()- 1 ;
string id= ObjectName (i);

for (i=ot;i>= 0 ;i--)
{
   if ( StringSubstr (id, 0 , 7 )== "tomato " )
      {
       if ( StringSubstr (id, 7 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
       if ( StringSubstr (id, 7 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
      }
   if ( StringSubstr (id, 0 , 6 )== "olive " )
      {
       if ( StringSubstr (id, 6 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
      }  
}
//---


////////////////////////////////////////////////////////////////////////////////

if ( Bid <high_price && High [ 0 ]<high_price && High [ 1 ]<high_price && stoch> 75 )
     {
       ObjectCreate ( "tomato " +Hdate, OBJ_TREND , 0 ,H,high_price, Time [ 0 ],high_price);
       ObjectSet ( "tomato " +Hdate, OBJPROP_COLOR ,Tomato);
       //Print ("tomato ON"+high_price);
     }
       

///////////////////////////////////////////////////////////////////////////////

if ( Bid >low_price && Low [ 0 ]>low_price && Low [ 1 ]>low_price && stoch< 25 )
   {
   ObjectCreate ( "olive " +Ldate, OBJ_TREND , 0 ,L,low_price, Time [ 0 ],low_price);
   ObjectSet ( "olive " +Ldate, OBJPROP_COLOR ,Olive);
   //Print ("olive ON"+low_price);
   }
 
   
   
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 

다시 말하다:

차트에 최대 하나의 토마토 라인이 있기를 원합니다.

해당 행이 OrderSend에 사용되는 경우 해당 행을 삭제하십시오.

만료되면(96) 줄을 삭제합니다.

올리브도 마찬가지.

따라서 토마토 라인이 이미 차트에 있으면 차트에 토마토가 없을 때까지 토마토 라인이 더 이상 없습니다.

희망 사항을 바꾸어 말하면 해결책을 찾는 데 도움이 될 것입니다. :)

 
cichichan :

다시 말하다:

차트에 최대 하나의 토마토 라인이 있기를 원합니다.

해당 행이 OrderSend에 사용되는 경우 해당 행을 삭제하십시오.

만료되면(96) 줄을 삭제합니다.

올리브도 마찬가지.

따라서 토마토 라인이 이미 차트에 있으면 차트에 토마토가 없을 때까지 토마토 라인이 더 이상 없습니다.

희망 사항을 바꾸어 말하면 해결책을 찾는 데 도움이 될 것입니다. :)


 datetime L= Time [low_nr];
string Ldate = TimeToStr (L, TIME_DATE | TIME_MINUTES );

당신이 당신의 라인을 만드는 시간입니까 ??? 그렇게하는 방법 ??

 int i, ot= ObjectsTotal ()- 1 ;
string id= ObjectName (i);

for (i=ot;i>= 0 ;i--)
{
   if ( StringSubstr (id, 0 , 7 )== "tomato " )
      {
       //  line found
      }
}

그렇다면 다른 선을 그리는 것을 어떻게 피할 수 있습니까 ....??

 

같은 이름 제한으로 인해 스크립트에서 선을 그리는 것을 중지하기 위해 개체의 이름을 처음으로 다시 변경하려고 생각했지만... 이름을 변경하는 기능이 없습니다.

흠.... 이해가 안됩니다.

내 마음이 붙어! 나는 어리석고 좌절감을 느낀다

 
cichichan :

같은 이름 제한으로 인해 스크립트에서 선을 그리는 것을 중지하기 위해 개체의 이름을 처음으로 다시 변경하려고 생각했지만... 이름을 변경하는 기능이 없습니다.

흠.... 이해가 안됩니다.

내 마음이 붙어! 나는 어리석고 좌절감을 느낀다

언제 새 라인을 만드나요 ??

최고 또는 최저를 찾은 막대가 아니라

그리고 라인이 없는 경우에만 생성해야 합니다.

따라서 Time[0]의 새 줄 사용 시간을 만들면

당신이 당신의 개체를 찾으면 이름이 무엇입니까 ?? ==> 문자열 id= ObjectName (i);

그래서 당신은 무엇을해야합니까?? StringSubstr (id, 0 , 7 )== "tomato " 가 있을 때 이 이름을 가져옵니다.

 

첫 번째 게시물로 돌아가기:

"이를 실행하면 토마토와 올리브에 대한 첫 번째 설정이 표시됩니다. 그런 다음 저널에 "토마토 켜기"가 다른 가격 레벨로 표시되더라도 차트에 새 토마토 라인이 표시되지 않습니다. 올리브도 마찬가지입니다."

이전 줄이 이미 존재하기 때문에 새 줄을 얻을 수 없습니다. 삭제하면 새로 그려집니다.

 

잠시 동안 나는 다음과 같이했습니다.

한 줄만 있으면 제대로 작동하는 것처럼 보이며 96개의 막대가 삭제된 후 조건이 다시 나타날 때 다시 그립니다.

 int start()
  {
/////////// K% over >75 or under <25 (no waiting for close)
double stoch;
stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );

double high_price,low_price;
int high_nr,low_nr;
high_nr= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 );  
high_price= High [high_nr];
low_nr= iLowest ( NULL , 0 , MODE_LOW , 34 , 2 );
low_price= Low [low_nr];
datetime H= Time [high_nr];
string Hdate = TimeToStr (H, TIME_DATE | TIME_MINUTES );
datetime L= Time [low_nr];
string Ldate = TimeToStr (L, TIME_DATE | TIME_MINUTES );


/////////////////////////////////////////////////////////////////////////////////
//---
int i, ot= ObjectsTotal ()- 1 ;
string id= ObjectName (i);

for (i=ot;i>= 0 ;i--)
{
   if ( StringSubstr (id, 0 , 7 )== "tomato " )
      {
       if ( StringSubstr (id, 7 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
       if ( StringSubstr (id, 7 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         Print ( "tomato valid" );
         break ;
         }
      }
}

 if (ot==- 1 )
      {
       if ( Bid <high_price && High [ 0 ]<high_price && High [ 1 ]<high_price && stoch> 75 )
         {
         ObjectCreate ( "tomato " +Hdate, OBJ_TREND , 0 ,H,high_price, Time [ 0 ],high_price);
         ObjectSet ( "tomato " +Hdate, OBJPROP_COLOR ,Tomato);
         //Print ("tomato ON"+high_price);
         }
      }  
//---


////////////////////////////////////////////////////////////////////////////////
for (i=ot;i>= 0 ;i--)
{
 if ( StringSubstr (id, 0 , 6 )== "olive " )
      {
       if ( StringSubstr (id, 6 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
       if ( StringSubstr (id, 6 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         Print ( "olive valid" );
         break ;
         }   
      }  
 }      

///////////////////////////////////////////////////////////////////////////////
if (ot==- 1 )
{
if ( Bid >low_price && Low [ 0 ]>low_price && Low [ 1 ]>low_price && stoch< 25 )
   {
   ObjectCreate ( "olive " +Ldate, OBJ_TREND , 0 ,L,low_price, Time [ 0 ],low_price);
   ObjectSet ( "olive " +Ldate, OBJPROP_COLOR ,Olive);
   //Print ("olive ON"+low_price);
   }
}
   
   
//----
   
//----
   return ( 0 );
  }
 

이것이 작동합니까?

 if ( StringSubstr (id, 7 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))

문자열이 서로에 대해 < 또는 >일 수 있습니다. 그건 질문입니다. 잘 모르겠습니다.

giol이 여러 줄을 원하면 줄에 다른 이름을 지정해야 한다고 말했기 때문에 당신은 그것을 복잡하게 만들고 있습니다. 그리고 그는 그 당시에 옳았습니다.

그가 당신이 한 줄만 원한다는 것을 알았다면 그는 그렇게 말하지 않았을 것입니다. devries가 제공한 솔루션은 여러 줄이 있는 경우에 매우 좋습니다. 감사합니다.

그러나 한 줄만 "토마토" 또는 "올리브"라고 부르고 싶다면 ObjectFind("tomato") ObjectDelete("tomato")를 수행하고 다음과 같이 저장된 Time[96] 및 Time[0]과 함께 시간 문제를 해결합니다. 선이 그려집니다.

다음에 일어날 문제는 조건 stoch> 75가 20 Bars 또는 50 Bars 동안 지속될 수 있다는 것입니다. 그런 다음 선을 삭제할 때 선을 그리는 조건은 여전히 유효하며 선이 삭제되자마자 , 또는 주문을 받으면 새로운 선이 그려집니다. 행운을 빕니다, 그렇게 어렵지 않습니다.

 

안녕

2주 동안 코드를 읽는 동안 개체가 복잡해 보였기 때문에 판매 및 구매에 대해 레벨 가격을 설정하기로 결정했습니다. 이 과정에서 문제가 발생합니다.

 void LevelSset()
{

stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );


high_bar= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 );
string H= TimeToStr ( Time [high_bar], TIME_DATE | TIME_MINUTES );
LSell= High [ iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 )];


if ( Bid <LSell && High [ 0 ]<LSell && High [ 1 ]<LSell && stoch> 75 && LevelSset== false )
         {
         ObjectCreate ( "tomato " +H, OBJ_ARROW , 0 , Time [high_bar],LSell+ Point * 20 );
         ObjectSet ( "tomato " +H, OBJPROP_ARROWCODE , 242 );
         ObjectSet ( "tomato " +H, OBJPROP_COLOR ,Tomato);
         LevelSset= true ;
         Print ( "LevelSset on " +LSell);
         }
if ( Close [ 2 ]>LSell && Close [ 1 ]>LSell && LevelSset== true )
   {
      LSell= 0 ;
      LevelSset= false ;
       Print ( "LSell" +LSell+ "expired due to close" );
   }
}

"if (Close[2]>LSell && Close[1]>LSell && LevelSset==true) 작동하지 않습니다.

if (Close[2]>LSell && Close[1]>LSell)을 제거하고 (LevelSset==true) 그대로 두거나 (Close[2]<LSell && Close[1]<1) 함수 를 변경하면 제대로 작동하는 것 같습니다.

감사합니다

 

몇 가지 아이디어, 무엇이 잘못되었는지... 누구?

감사합니다

사유: