전략이 필요한 사람은 누구입니까? 많은 무료 - 페이지 58

 
1. float를 double로 대체하기 위해 표시기를 다시 작성할 수 있습니다.
2. 보호된 정적 부동 fMicron = 0.000075f; // 두 float를 비교할 때 사용되는 계수
3. 지표 기본 생성자:

 /// <summary>
/// The default constructor
/// </summary>
public Indicator ( )
{
    sIndicatorName   = string . Empty ;
    bSeparatedChart = false ;
    bIsDescreteValues = false ;
    afSpecValue     = new float [ ] { } ;
    fMinValue       = float . MaxValue ;
    fMaxValue       = float . MinValue ;
    bIsCalculated   = false ;
    parameters       = new IndicatorParam ( ) ;
    component       = new IndicatorComp [ ] { } ;
}




4. 기본 가격:



 /// <summary>
/// Calculates the base price.
/// </summary>
/// <param name="price">The base price type.</param>
/// <returns>Base price.</returns>
protected static float [ ] Price ( BasePrice price )
{
     float [ ] afPrice = new float [ Bars ] ;

     switch ( price )
     {
         case BasePrice . Open :
            afPrice = Open ;
             break ;
         case BasePrice . High :
            afPrice = High ;
             break ;
         case BasePrice . Low :
            afPrice = Low ;
             break ;
         case BasePrice . Close :
            afPrice = Close ;
             break ;
         case BasePrice . Median :
             for ( int iBar = 0 ; iBar < Bars ; iBar + + )
                afPrice [ iBar ] = ( Low [ iBar ] + High [ iBar ] ) / 2 ;
             break ;
         case BasePrice . Typical :
             for ( int iBar = 0 ; iBar < Bars ; iBar + + )
                afPrice [ iBar ] = ( Low [ iBar ] + High [ iBar ] + Close [ iBar ] ) / 3 ;
             break ;
         case BasePrice . Weighted :
             for ( int iBar = 0 ; iBar < Bars ; iBar + + )
                afPrice [ iBar ] = ( Low [ iBar ] + High [ iBar ] + 2 * Close [ iBar ] ) / 4 ;
             break ;
         default :
             break ;
     }
     return afPrice ;
}

6. NET <-> MT 브리지가 작동합니다. MT를 통해 FSB 거래를 할 시간입니다. 물론 "완벽한" 상태가 될 때까지만 데모 계정 을 위한 것입니다.

 

내 생각에 Aroon 표시기는 다음을 사용합니다. bIsDescreteValues = true;


RSI에 대해 공식에 대해 궁금했던 기억이 납니다. 5~6년 전 일입니다. 나는 인기있는 TA 책에서이 공식을 사용했다고 생각합니다. 정확히 기억하지 마십시오.

 

"이전 막대 값 사용"

저는 개인적으로 이것이 FSB의 가장 중요한 기능 중 하나라고 생각합니다.


         /// <summary>
         /// Sets the "Use previous bar value" checkbox
         /// </summary>
         /// <returns>Is any Changes</returns>
         public bool SetUsePrevBarValueCheckBox ( int iSlot )
         {
             bool isChanged = false ;

             for ( int iParam = 0 ; iParam < Slot [ iSlot ] . IndParam . CheckParam . Length ; iParam + + )
             {
                 if ( Slot [ iSlot ] . IndParam . CheckParam [ iParam ] . Caption = = "Use previous bar value" )
                 {
                     bool bOrigChecked = Slot [ iSlot ] . IndParam . CheckParam [ iParam ] . Checked ;
                     bool bChecked = true ;

                     // Entry slot
                     if ( Slot [ iSlot ] . SlotType = = SlotTypes . Open )
                     {
                        bChecked = true ;
                     }

                     // Open filter slot
                     else if ( Slot [ iSlot ] . SlotType = = SlotTypes . OpenFilter )
                     {
                        bChecked = EntryExecutionTime ! = TimeExecution . Closing ;
                     }

                     // Close slot
                     else if ( Slot [ iSlot ] . SlotType = = SlotTypes . Close )
                     {
                        bChecked = true ;
                     }

                     // Close filter slot
                     else if ( Slot [ iSlot ] . SlotType = = SlotTypes . CloseFilter )
                     {
                        bChecked = false ;
                     }

                     if ( bChecked )
                     {
                         for ( int iPar = 0 ; iPar < Slot [ iSlot ] . IndParam . ListParam . Length ; iPar + + )
                         {
                             if ( Slot [ iSlot ] . IndParam . ListParam [ iPar ] . Caption = = "Base price" & &
                                Slot [ iSlot ] . IndParam . ListParam [ iPar ] . Text     = = "Open" )
                             {
                                bChecked = false ;
                             }
                         }
                     }

                     if ( bChecked ! = bOrigChecked )
                     {
                        isChanged = true ;
                        Slot [ iSlot ] . IndParam . CheckParam [ iParam ] . Checked = bChecked ;
                     }
                 }
             }

             return isChanged ;
         }
 

지표 값을 전체 정밀도로 보려면 차트 창에서 F12를 누르십시오.


또 다른 옵션은 "명령 콘솔"을 사용하는 것입니다. ind xxxx 는 막대 xxxx에 대한 표시기를 보여줍니다.




나는 MT 공식을 깊이 파고 들지 않습니다. 그것들은 아마도 크게 다르지 않을 것입니다. 다음은 기본 FSB RSI 및 MT RSI입니다.







______________________--

편집하다:

이 추가 평활화 없이 RSI를 계산하려고 했습니다.

             for ( int iBar = 1 ; iBar < Bars ; iBar + + )
             {
                 if ( afBasePrice [ iBar ] > afBasePrice [ iBar - 1 ] ) afPos [ iBar ] = afBasePrice [ iBar ] - afBasePrice [ iBar - 1 ] ;
                 if ( afBasePrice [ iBar ] < afBasePrice [ iBar - 1 ] ) afNeg [ iBar ] = afBasePrice [ iBar - 1 ] - afBasePrice [ iBar ] ;
             }

             float [ ] afPosMA = MovingAverage ( iPeriod , 0 , maMethod , afPos ) ;
             float [ ] afNegMA = MovingAverage ( iPeriod , 0 , maMethod , afNeg ) ;

             //for (int iBar = iFirstBar; iBar < Bars; iBar++)
             //{
             //    afPosMA[iBar] = (afPosMA[iBar - 1] * (iPeriod - 1) + afPos[iBar]) / iPeriod;
             //    afNegMA[iBar] = (afNegMA[iBar - 1] * (iPeriod - 1) + afNeg[iBar]) / iPeriod;
             //}

             for ( int iBar = iFirstBar ; iBar < Bars ; iBar + + )
             {
                 if ( afNegMA [ iBar ] = = 0 )
                    afRSI [ iBar ] = 100 ;
                 else
                    afRSI [ iBar ] = 100 - ( 100 / ( 1 + afPosMA [ iBar ] / afNegMA [ iBar ] ) ) ;
             }


그러나 이 경우 2009.3.24의 RSI 값은 74.800으로 점프합니다.



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


스텔라레이터 좋은 말씀 감사합니다!

나는 당신과 같은 사람들 때문에 Forex Strategy Builder를 버리지 않을 것입니다. 반대의 경우에도 FSb를 보다 강력하고 사용자 친화적으로 만들기 위해 토론할 수 있습니다.

그런 방향으로 FSB에 MT 지표를 추가할 수 있다고 생각합니다. MT 호환 모드 와 같은 것 :)

MT_MACD, MT_RSI, ... 이들은 MT 표준과 동일한 매개변수를 갖습니다.


우리는 바 열림과 바 닫는 입구/출구 지점 에 대한 해결책을 찾아야 합니다. FSB -> MT 통합에 필수적입니다.


 
Stellarator >> :

.......(2개의 버퍼)를 하나로 결합하면 작동하지 않습니다(내 생각에... 1/0(비트 마스크로 전환될 수 있음)뿐만 아니라 가격표도 있을 수 있음) . 아마도, 나는 어떻게 든 지표 값 자체를 다룰 것입니다 ... 보자 ... 길을 따라 ...

글쎄, 왜 (?).

나는 다양한 표시기 버퍼에서 여러 값을 얻기 위해 오랫동안 icustom에 대한 단일 호출을 사용해 왔으며, 특히 최적화할 때 그리고 "무거운" 칠면조에서도 이 기능을 코드에서 여러 번 사용하는 것은 너무 낭비입니다. 사실, 우리에게 필요한 것은 (최대한까지) 거래의 방향과 레벨 및 SL & TP를 얻는 것입니다. ..... 작업은 간단한 산술로 해결됩니다.

다음은 하나의 추가 버퍼(Signal)만 있는 표시기 코드의 일부입니다.

 // в самом кончике start такой фрагмент

      
   if ( Direction [ 0 ] ! = 0 )
      {
      if ( Direction [ 0 ] > 0 ) Signal [ 0 ] = Set_TP [ 0 ] / Point * 1000000 + Set_SL [ 0 ] / Point ;
      if ( Direction [ 0 ] < 0 ) Signal [ 0 ] = - ( Set_TP [ 0 ] / Point * 1000000 + Set_SL [ 0 ] / Point ) ;
      }
   return ( 0 ) ;

다음은 EA 코드의 역변환입니다.

 int start ( )
  {
   // Получение значений из буфера индикатора в последней фазе формирования бара
   if ( TimeCurrent ( ) > ( Time [ 0 ] + CP60 )
      {
      Signal = iCustom ( NULL , 0 , "_iK_tay_v01M1" , Discret , 6 , 0 )
      }     

   if ( Time [ 0 ] ! = prevtime )
      { 
      Calcul ( ) ;
      //if (Tral !=0) CalcLevel();
      prevtime = Time [ 0 ] ;
      }
   else return ;

. . . . . . . . .

void Calcul ( )
  {
   OpenSell = 0 ; OpenBuy = 0 ; CloseBuy = 0 ; CloseSell = 0 ;
   
   if ( Signal > 0 ) 
      {
      OpenBuy = 1 ; CloseSell = 1 ;
      TP = NormalizeDouble ( Signal * Point / 1000000 , Digits - 1 ) ;      
      SL = ( Signal - TP / Point * 1000000 ) * Point ;   
      }
   if ( Signal < 0 ) 
      {
      CloseBuy = 1 ; OpenSell = 1 ;
      TP = NormalizeDouble ( MathAbs ( Signal ) * Point / 1000000 , Digits - 1 ) ;      
      SL = ( MathAbs ( Signal ) - TP / Point * 1000000 ) * Point ;   
      }   
   return ;
  }

따라서 지표를 한 번만 호출하면 3개의 지표 값(방향, TP 및 SL)을 얻을 수 있습니다. 얻은 결과는 원하는 대로 추가로 폐기할 수 있습니다. :)

그 원칙은 분명하기를 바랍니다.

 

모두 안녕하십니까!


Miroslav_Popov писал(а) >>

1. float를 double로 대체하기 위해 표시기를 다시 작성할 수 있습니다.

Miroslav - 이것은 중요합니다! 일부 이유는 이미 내 게시물에 나와 있습니다. 그러나 나는 인건비를 완벽하게 이해합니다... 그리고 지금 (아마도) 당신이 찾고 있는 다리나 다른 무엇인가에서 일하고 있다는 사실.


그러나 시간을 찾아야 합니다. 내 예측에 따르면 - 특정 시간(하루 이내)을 넘지 않습니다. 왜냐하면 변수를 선언할 때 단순히 하나를 다른 것으로 바꾸는 문제가 아닙니다("아름다움을 위해" 최소한 시각적 확인 및 시각적 조정이 수반됨(예: 탭 등으로 변수가 설명됨) :) - 비록 이것이 중요하지 않습니다) .

첫째, float 가 의도적으로 사용되는 경우가 꽤 있습니다(정밀도 감소를 강제하기 위해). 여기서 전체 코드를 전체적으로 볼 필요가 있습니다.

둘째, 그러한 ("새") 숫자를 비교하고 FSB에 표시하는 문제(아래 2항에서 자세히 설명)

요컨대 - 전체 코드를 주의 깊게 살펴보고 실제 수학을 두 배로 전환하는 것과 관련된 가능한 단점을 최소한 추정해야 합니다.


Miroslav_Popov 작성 >>

2. 보호된 정적 부동 fMicron = 0.000075f; // 두 부동 소수점을 비교할 때 사용되는 계수


(그리고 바로 아래):

표시기 값을 전체 정밀도로 보려면 차트 창에서 F12를 누르십시오.

그리고 이것은 문제 중 하나입니다! 왜 정확히 0.000075입니까? 그리고 0.00005 아님? 아니면 0.000001? (내 것처럼)

자세한 문제(관심 있는 분들을 위해) 및 질문:

아시다시피 두 개의 실수를 비교하여 같음을 비교하면 절대 비슷한 구성으로 수행해서는 안 됩니다.

double Value1, Value2;

if (Value1 == Value2) {
  // Some useful code there
}

이는 일부 계산 결과(특히 곱하기/나누기 주제에 대한 변형) 후에 이러한 변수의 값이 시각적으로 유사할 수 있기 때문입니다(예: 1.0 및 1.0). 정말 일치 합니다. (실제로는 1.000001과 1.000000). 이 속성은 컴퓨터에서 실수 표현의 특정 이산성과 계산의 특정(유한) 이산성(정확도)에서 비롯됩니다. 일반적인 경우 평등 비교는 고전 테마의 변형에 따라 수행됩니다(그런데 Miroslav가 사용함).

if (Math.Abs(afIndValue[iCurrBar] - afIndValue[iBaseBar]) < fMicron) {
  // Some code there
}

이것은 fMicron에 의해 결정된 일부 유한 정밀도와 동일한지 여부에 대한 두 실수의 "고전적인" 비교입니다(이 경우).


그리고 여기에 잠재적인 문제 중 하나가 있습니다. 이 fMicron의 가치를 어떻게, 누가, 어떤 경우에 결정해야 합니까? 상수는 Miroslav와 같이 항상 좋은가?


일반적으로 음모를 따라 잡지 않으면 다음 이론의 지지자입니다.

1. 일반적으로 이러한 변수의 비교에는 같음불평등 (<, >)의 두 가지 유형이 있습니다.

2. 변수 자체에는 두 가지 유형이 있습니다 . 고정 정밀도가 보장된 변수(가격, 로트 등)와 특정 정밀도가 없는 추상 값(예: 지표 값)입니다.

3. 불평등의 관점에서, 변수(모든 유형의)는 (일반적인 경우) 어리석게 "이마에서" 비교됩니다(if (Value1 < Value2) { ...}). 여기에서 정확도를 제한해야 하는 경우(매우 드물지만) Miroslav와 같은 구성을 사용할 수 있습니다.

if (afIndValue[iBaseBar] < afIndValue[iCurrBar] - fMicron) {
  // Some code there
}

4. 그러나 평등의 관점에서 문제는 (일반적으로) 운영되는 데이터에 따라 다른 방식으로 접근됩니다.

4.1. 고정 정밀도로 두 숫자를 비교해야 하는 경우(예: 주문을 수정해야 하는지 여부를 결정하기 위해 두 가격 값("결과 없음"으로 실행되는 것을 방지하기 위해)) 일반적으로 다음과 같이 수행됩니다(또한 "클래식").

 int ComparePriceInt ( double Value1 , double Value2 ) {
   Value1 - = Value2 ;
   Value2 = Point / 2.0 ;
   if ( Value1 > Value2 )
       return ( 1 ) ;
   if ( Value1 < - Value2 )
       return ( - 1 ) ;
   return ( 0 ) ;
}

이 기능은 우리의 경우 중복되지만 요점이 아닙니다. 핵심 구성은 Point / 2.0 입니다. 필요하고 정확하며 충분한 계산 정확도를 제공하는 것은 바로 이 fMicron 입니다... 이 특별한 경우에! 두 가격이 비교될 때(같은 Digits 및 결과적으로 Point ) (포인트 = 0.0001)과 같은 경우:

f마이크론 = 0.00005

그리고 1.2345(주문 가격)와 1.23451(지표 값)을 비교하면 - 우리는 평등을 얻고 1.2345와 1.23456 - 불평등을 얻습니다... fMicron = 0.000075인 마지막 경우에는 어떻게 될까요? ;) 물론 변수를 하나의 (더 작은) 정밀도로 사전 정규화할 수 있습니다. 하지만 이것은 우리의 방식이 아닙니다 :D...

다시 한 번 - 이 매개변수의 선택은 중요하며 각각의 특정 경우에 대해 "조금 독특합니다" :)1


다음과 같은 패러다임을 제안합니다 .

1. fMicron의 계산된 값으로 고정 정밀도 변수를 비교합니다(예: 가격의 경우 Point / 2).

2. 지표 및 기타 유사한 "무한하게 정확한 작은 것들"의 값 :)은 사용된 기기의 최소 포인트 값과 동일한 fMicron 상수를 10으로 나눈 값과 비교됩니다. 즉. Digits가 4를 초과하지 않는 기기의 경우 - fMicron = 0.00001, Digits = 5이면 fMicron = 0.000001 및 유사하게.

Miroslav - 전문가의 의견이 필요합니다 :)?!


이제 대중을 위한 질문:

모든 DataWindow에서(MT 또는 FSB(Indicator Charts)) - 표시기 값이 항상 고정 정밀도(자리수 = 4)로 표시되는 이유 는 무엇입니까? 소수점 이하 3자리는 왜 안되나요? 아니면 5, 6, 7, ...? :)?! 아니, 정말?

Miroslav에는 "stash"(숨겨진 기능? ;))가 있었습니다. - F12 에 대해 말하는 것입니다! 그리고 MT에서 무엇을 눌러야합니까?

그리고 일반적으로 누가이 상수를 결정 했습니까? (소수점 4자리)

대부분의 도구(누군가가 방금 해킹함)의 경우 들어오는 따옴표(1.2345)의 차원과 거의 직접적으로 관련이 있다고 생각합니다. 그러나 많은 DC가 큰 비트 깊이(예: 5)로 전환하고 있다는 것은 비밀이 아닙니다. 그렇다면 실제로 상품 따옴표(숫자)와 동일한 차원에서 지표 값을 표시하지 않는 이유는 무엇입니까?

아니면 제가 근본적으로 주제의 내용을 "따라잡지" 않고 있습니까?


Miroslav_Popov 작성 >>

3. 지표 기본 생성자:

4. 기본 가격:

Miroslav, 소스 페이지에 제시된 코드를 아주 잘 이해했습니다. :) 그리고 보호된 정적 float [ ] Price ( BasePrice price )가 하는 일은 완벽하게 이해합니다. 이것이 내 코드의 번거로움에 대한 힌트라면 저장을 위해 추가 버퍼(일반적으로 가격 버퍼의 복사본 또는 계산된 복사본(일반 등))를 사용하는 것을 의도적으로 거부했다고 대답하겠습니다. 그리고 장소가 저장되고 모든 종류의 Typical이 있는 곳에서 여전히 계산해야 합니다!


여기서 FSB와 MT에서 지표 값을 계산하는 접근 방식의 중요한 차이점 을 언급할 필요가 있습니다.

1. 첫째, 적어도 당분간은 - FSB 자체에 대해 FSB에 로드된 따옴표는 정적입니다. 그는 한 번 다운로드하고 전체 막대 범위에 대해 필요한 지표의 값을 한 번 계산한 다음 거래 로봇의 동작을 모방하여 단순히 "이동"합니다. 저것들. 다시 한 번 - 지표 값은 거래 로봇 가상화를 시작하기 전에 한 번 계산됩니다. 이것은 특히 무역 거래의 에뮬레이션 속도를 설명합니다. MT의 시세는 끊임없이 나오고 기본 전략 테스터는 미래를 보지 못합니다. 매번 지표의 값을 계산해야 합니다. 그리고 Miroslav의 접근 방식 (전체 버퍼 계산)을 어리석게 적용하면 ... 그들은 나에게 썩은 계란을 던집니다. :). 따라서 IndicatorCounted() 사용에 특별한 주의를 기울여야 합니다! 지표는 각각의 특정 사례에서 가능한 한 빠르게 계산됩니다(모든 막대를 계산해야 하는 경우 또는 하나만 계산해야 하는 경우). 어떤 곳에서는 무언가 - 여전히 최적화 할 수 있지만 여가 시간에 ...

2. 응답 매번(새 틱이 도착할 때) 추가 버퍼에서 가격 값을 생성하는 것은 불필요합니다. 계산할 필요가 없으므로 함수 자체에서 계산하도록 합니다(동일한 MovingAverage 등). 공간이 절약되고 논리가 단순화되며(매번 이러한 버퍼에서 다시 계산할 막대를 분석할 필요가 없음) 속도가 절약됩니다(일반적인 경우 더 높은 곳에서도). "내 생각에는 - 그래서" (c) Winnie Pooh


지표 변환에 대해 다시 한 번 언급하면 아마도 중요한 것은 함수의 논리(및 지표 자체)를 완전히 보존하고 MT의 특정 사용 사례에 대해 약간 수정한다는 것입니다. 그러나 지표 자체를 제어하기 위해 매개변수의 순서와 이름을 유지합니다.

얘들 아 - 결국 소스를보십시오. '아름답다'고 노력했습니다 :).


내 전환의 최종 의미는 다음과 같습니다. 예를 들어, 포지션의 오프닝 포인트와 추가 로직을 위한 3개의 인디케이터가 있습니다. 다음은 주문을 하기 위한 코드가 어떻게 생겼는지입니다(물론, 대략적으로):

 if ( IsSignal ( iCustom ( NULL , 0 , "fsbIndicator1" , SLOT_TYPE_LC , Param2 , Param3 , . . . , 0 , 0 ) )
     & & IsSignal ( iCustom ( NULL , 0 , "fsbIndicator2" , SLOT_TYPE_LC , Param2 , Param3 , . . . , 0 , 0 ) )
     & & IsSignal ( iCustom ( NULL , 0 , "fsbIndicator3" , SLOT_TYPE_LC , Param2 , Param3 , . . . , 0 , 0 ) ) )
{     
// Открываем длинную позицию (предпоследний 0 в значениях индикаторов - указатель на буфер логики длинных позиций (1, соотв. - на буфер логики коротких))
     // Если у нас значение POP берется из еще одного индикатора, то это значение берется аналогично, только меняется логика поведения индикатора:
     // iCustom(NULL, 0, "fsbIndicator", SLOT_TYPE_POP, Param2, Param3, ..., 0, 0)
}

이 같은. 매개변수 값을 iCustom에 제출하고 모든 값이 신호를 보낼 때까지 기다립니다. 모두. 지표값 자체에 대한 분석이 없는데... 왜?

나는 그것이 아름답다고 생각합니다 ... 또는 아닙니다 :)?

 

지표 정보:

(Aroon and bIsDescreteValues ​= true;)에 대해 고려하겠습니다.


RSI에 대해 ...

Miroslav - 원하는 구조가 당신을 혼란스럽게 만들었습니다. :). 너무 게으르지 말고 다시 주석을 달고 CORRECTLY WORKING 표시기 를 사용하여 "일치하는" 값을 얻으십시오. :). RSI를 계산하는 고전적인 공식은 MA의 기하급수적 다양성을 기반으로 합니다(특히 부드럽게). 따라서 지표 매개변수에서 이 스무딩 모드( 매끄러움 )를 표시하십시오... 그러면 결과가 "기분 좋게 놀라게" 됩니다. 나는이 절차를 스스로 할 수는 없지만 내 말을 100 % 확신합니다. 저를 설득하세요 :)?

테스트 결과에 따라 다음 제안이 있을 것입니다. 원하는 코드를 제거하고 RSI(각각 RSI 자체)를 사용하여 모든 지표에서 Smoothed의 maMethod 매개변수의 기본값을 설정합니다 . 따라서 기본적으로 사용자로부터 이러한 질문이 없습니다. 그러나 표시기에서 이 매개변수를 선택하면 작동 가능합니다! (예를 들어, RSI 계산 결과를 기반으로 RSI 자체의 현재 동작과 함께 RSI MA 오실레이터를 변환했습니다. 해당 매개변수에 표시된 내용은 중요하지 않습니다.)

 
Miroslav_Popov >> :

"이전 막대 값 사용"

저는 개인적으로 이것이 FSB의 가장 중요한 기능 중 하나라고 생각합니다.

오 예!

이것은 실제로 FSB의 가장 중요한 기능 중 하나입니다. 그리고 이 기능을 고려하여 표시기 논리의 올바른 작동을 테스트하는 데 상당한 주의를 기울였습니다.

"기본" 값 개수를 보여주는 코드에 감사드립니다! 감안하자...

 
rider >> :

글쎄요(?).

나는 다양한 표시기 버퍼에서 여러 값을 얻기 위해 오랫동안 icustom에 대한 단일 호출을 사용해 왔으며, 특히 최적화할 때 그리고 "무거운" 칠면조에서도 이 기능을 코드에서 여러 번 사용하는 것은 너무 낭비입니다. 사실, 우리에게 필요한 것은 (최대한까지) 거래의 방향과 레벨 및 SL & TP를 얻는 것입니다. ..... 작업은 간단한 산술로 해결됩니다.

...

그 원칙은 분명하기를 바랍니다.




:), 네, 물론 작동할 것입니다(저는 지난 시간에 의도적으로 "거칠게" 했습니다). 저는 값을 하나의 매개변수로 접는 문제에 익숙합니다. 그리고 주어진 코드에 감사드립니다 (즉시 질문은 - 원래 값과 "이후 확장"에 불일치가 있었습니까? 여전히 두 배 ...)

핵심 질문... 이 특별한 경우에 필요합니까?

두 가지 이유가 있습니다.

1. 추가 버퍼 활용(저에게는 이것이 필수입니다) - 결국 지표에는 그렇게 많지 않습니다. 하지만 아직 충분합니다(드디어 Ishimoku를 상대할 시간입니다. 그러면 모든 것이 명확해질 것입니다. :))

2. 코드에서 표시기를 호출하는 속도(귀하의 예)... 내 대답은 필수가 아닙니다! 모든 책임을 지고 선언합니다. 동기 부여:

각각의 새로운 틱과 함께, 당신은 여전히 지표로 올라가야 합니다(해야만 합니다). 그래서? (글쎄, 거기 - 원하는 가격이나 다른 것을 취하십시오) 모든 사람이 아니라도 필요할 때 거기에. 주요 힌트는 분명히 어드바이저의 한 번의 반복 내에서 iCustom을 여러 번 호출하여 표시기의 여러 재계산을 생성한다는 것입니다. 강제로 설득! 핵심 뉘앙스는 "Expert Advisor의 1회 반복의 한계"입니다. 따라서 이 한도 내에서 표시기는 한 번(첫 번째 호출 시) 계산됩니다! 100% 자신있게 선언합니다. 모든 추가 호출은 시작하지 않고 단순히 필요한 버퍼에서 필요한 값을 가져옵니다. 변경되지 않은 입력 매개변수가 있는 100% 조건(버퍼 및 오프셋 제외). 이 규칙은 하나의 기기 내 계산에 유효합니다. 하지만 iCustom이 다른 TF 및 도구로 전환하더라도 원칙은 유지된다고 생각합니다.


일반적으로 - 나는 오늘 밤 Ishimoku를 볼 것입니다 - 나는 거기에서 확실히 결정할 것입니다. 결국 논리를 위한 두 개의 버퍼가 있습니다 ... 또는 하나 :)

 

일반적으로 저녁까지 모두가 (일하러 갔다).

문제에 대해

We have to find solution to Bar Opening and Bar closing entry/exit points. They are vital for FSB -> MT integration.

생각한다.


그러나 가장 가능성이 높습니다(이 주제에 대한 MT의 신호 부족 고려) - 위의 코드(이전 페이지의 템플릿)는 다소 최적입니다(조금 개선해야 할 수도 있습니다 ... 저녁에 나는 문제에 대해 "깊이" 시도할 것입니다.)

사유: