[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 243

 

문제는 일련의 수익성 없는 주문을 계산하는 방법입니다????

즉, 전술을 테스트하기 위해 정지 주문이 몇 번이나 닫힐 것인지... 그리고 마지막 주문을 알고 싶습니다.

얘들아 진짜 필요해...

 
VOLDEMAR :

문제는 일련의 수익성 없는 주문을 계산하는 방법입니다????

즉, 전술을 테스트하기 위해 정지 주문이 몇 번이나 닫힐 것인지... 그리고 마지막 주문을 알고 싶습니다.

얘들아 진짜 필요해...


나는 나 자신에 대해 이렇게 생각한다.

반복 = 스톱(귀하의 이해)이 손실로 마감되는 경우 스톱으로 주문을 마감하는 횟수입니다.

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0 ; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0 ;   // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0 ,
Time_at_History_Previos = 0 ;     
 
 if ( OrdersHistoryTotal () != 0 )
   {
     for ( int counter = OrdersHistoryTotal ()- 1 ; counter >= 0 ; counter--)
      {
       OrderSelect (counter, SELECT_BY_POS, MODE_HISTORY);
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
         {
           if ( OrderType () == OP_BUY || OrderType () == OP_SELL)
            {
             if ( OrderProfit () < 0 ) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if (Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                 //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                 if ( OrderProfit () >= 0 )
                   break ;
               }
            }
         }
      }
   }
 
고맙습니다 ! 하지만 내가 알기로는 이 코드는 100번의 거래 전이든 5번이든 상관없이 히스토리에서 전체 시리즈를 찾습니다.
 
VOLDEMAR :
고맙습니다 ! 하지만 내가 알기로는 이 코드는 100번의 거래 전이든 5번이든 상관없이 히스토리에서 전체 시리즈를 찾습니다.

아니요. 폐쇄된 것이 이익으로 나타날 때 역사 속으로 가장 극단적인 폐쇄형 샘플링 - 연속으로 수익성이 없는 폐쇄형 수의 값이 표시되면서 시리즈가 중단됩니다 = 반복.
 

안녕하세요.

그런 링크가 맞을까요?

   // заполним значениями сигнальные массивы и посчитаем их количество
   for (i=DisplayBars;i>= 0 ;i--) 
  {

    
if (Prz0 == 0 ) 
       {
           f= GetBarNumWithZerroDist(i); // на этом баре пересечение
         if (f!=- 1 )
          {
           Price01 = iClose (Symbol_1, 0 ,f);
           Price02 = iClose (Symbol_2, 0 ,f);
           Prz0 = 1 ;
           i=f;
           }
       } 
   }
 int GetBarNumWithZerroDist( int i)
{
double Smb1Cl0 = NormalizeDouble ( iClose (Symbol_1, 0 , 0 ), Digits );
double Smb2Cl0 = NormalizeDouble ( iClose (Symbol_2, 0 , 0 ),Digits2);
double Smb1Pnt = MarketInfo (Symbol_1, MODE_POINT);
double Smb2Pnt = MarketInfo (Symbol_2, MODE_POINT);
int     mBars   = MathMin ( iBars (Symbol_1, 0 ), iBars (Symbol_2, 0 ));

     for ( int f=i;f>= 0 ;f--) 
    {
        Price1 =   NormalizeDouble (Lot*(Smb1Cl0 - iClose (Symbol_1, 0 ,f)) / Smb1Pnt, 0 );
        Price2 = NormalizeDouble (K*Lot2*H*(Smb2Cl0 - iClose (Symbol_2, 0 ,f)) / Smb2Pnt, 0 );
        Spread = Price1 - Price2; 
         //Print ("Price1="+Price1, " Price2="+Price2);
         if ( MathAbs (Spread)== 0 ) return (f);
    }
     return (- 1 );
}
 

마음에 들었던 점입니다 :)

 if ( MathAbs (Spread)== 0 ) return (f);
 
Roger :

마음에 들었던 점입니다 :)


여기에 오류가 있습니까?

Spread==0인 막대 값을 반환해야 합니다.

그러한 값이 없으면 -1을 반환합니다.

 

안녕하세요.

질문: OrderSend() 함수 가 실행 후 "0" 또는 "-1"보다 작은 값을 반환할 수 있습니까? 누구든지 이와 같은 것을 만난 적이 있습니까? 또는 "문서"에 제공된 정보는 신뢰할 수 있습니다.

int OrderSend ( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
포지션을 열거나 보류 주문을 하는 데 사용되는 주요 기능입니다.
거래 서버가 주문에 할당한 티켓 번호를 반환하거나 실패할 경우 -1을 반환합니다 .
추신: 저는 Telepath로 일하면서 다른 사람의 코드에서 오류를 찾고 있습니다...
 
나는 수평선을 사용하여 고문의 가상 트롤을 만들었습니다. 테스터에서는 잘 작동하지만 최적화 중에는 테스터가 이러한 라인으로 작동하지 않는 것 같습니다. 이유는 무엇입니까? 그것을 고치는 방법?
 
DimaMA :
나는 수평선을 사용하여 고문의 가상 트롤을 만들었습니다. 테스터에서는 잘 작동하지만 최적화 중에는 테스터가 이러한 라인으로 작동하지 않는 것 같습니다. 이유는 무엇입니까? 그것을 고치는 방법?

왜 수평선이 필요합니까? 변수에 있는 줄의 값을 기억하면 행복할 것입니다!! 그리고 고문은 더 빨리 "생각"할 것입니다! 그리고 시각적 효과를 위해서만 수평선을 남길 수 있습니다.

그 이유는 다음과 같습니다. 테스터는 시각적 모드에서만 그래픽 개체로 작동 합니다! 최적화 하면 비주얼 모드도 없고... TF와 페어 이름 뒤에 괄호 안에 '비주얼'이라고 써있는 차트를 열어두어도 되지만... 이것은 도움이 될 것입니다. 확인하지 않았습니다. 그래서 나는 이 차트(이전에는 테스트를 시각화하는 데 사용됨)에서 주문이 어떻게 나타나고 사라지는지를 볼 수 있기 때문에(차트가 더 이상 관련되지 않는 것처럼 보이지만)... 아무도 말해 줄 수 없다고 생각했습니다!?

하지만 내 조언은 - 그래픽 개체에서 매개변수를 추출하는 것에서 벗어나십시오. 이 매개변수를 변수에 저장하도록 하십시오... 그래픽 개체를 변수로 만들 필요가 없습니다! :)))))

사유: