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

 

안녕하세요!

작업이 발생했습니다. 언뜻보기에는 간단해 보이지만 뭔가 잘 되지 않습니다. 값이 항상 행에 있는 배열이 있습니다(어떤 경우에는 값이 오름차순, 다른 경우에는 내림차순). 일정 수준(빨간색 그림)이 있습니다. 빨간선의 레벨에 가장 가까운 두 개의 배열 값을 찾아야 합니다. 그림 a)에서는 인덱스 0과 1이 있는 배열 값이 됩니다. 그림 b)에서는 인덱스 2와 1이 있는 배열 값이 됩니다. 그림 c)와 f)에서는 배열 값이 됩니다. ​인덱스 0과 0. 그림 d)와 e)에서 인덱스 2와 2가 있는 배열의 값입니다.

이 문제를 해결하는 방법을 알려주세요. 미리 감사드립니다.

 
Roman. :

그런 다음 전혀 걱정하지 마십시오. 거래 기준을 충족하기 위해 칠면조 코드를 전문가에게 전송하면 됩니다. 그런 다음 올빼미에서 이 칠면조에서 전송된 거래 조건에 따라 다음을 통해 포즈를 엽니다. 고문 그리고 그게 다야...
감사합니다 이해했습니다 :)
 
skyjet :
감사합니다 이해했습니다 :)

전혀 ... 모두가 이것을 겪었습니다. :-)
 
drknn :

오늘 토요일은 휴무입니다. Expert Advisor를 실행하면 초기화가 수행되지만 종료 및 틱이 없으므로 시작 기능이 실행되지 않습니다(즉, Trade()가 호출되지 않음). 작업의 정확성을 확인하려면 초기화 블록에 이 함수를 호출하거나 테스터에서 테스트해야 합니다.

이 함수를 Init()에 대입하고 Print (DayOfWeek()) 체크 코드를 추가한 결과 서버에서 시간을 가져왔고 서버는 금요일 ...

교체됨

 if (DayOfWeek()== 0 || DayOfWeek()== 6 )

   if ( TimeDayOfWeek ( TimeLocal ())== 0 || TimeDayOfWeek ( TimeLocal ())== 6 )

그리고 그것은 제대로 작동했습니다.

고맙습니다.

 

안녕 동지들!

예상치 못한 문제에 봉착했습니다.

어제 테스터는 정상적으로 작동했습니다. 어제 저녁부터 테스터의 모든 전략 버전은 하나의 거래를 열고 1초 또는 몇 분/시간의 기록 후에 테스터가 작업을 완료합니다. 오류가 없습니다.

누군가 찾아왔나요? 말하다

 

안녕하세요.

오류를 찾을 수 있도록 도와주세요.

다음은 Expert Advisor에서 분리된 전체 문제 영역입니다.

 extern int      MAGIC= 1 ; 

int start()
  {
//----
   int tt = 0 ;
   double SchBuyLots     = SchBuyLots_b(MAGIC);
   double SchSellLots    = SchSellLots_b(MAGIC);
   double SchBuyLots100  = SchBuyLots100_b();
   double SchSellLots100 = SchSellLots100_b();
   double SchBuyLimitLots    = SchBuyLimitLots_b(MAGIC);
   double SchSellLimitLots   = SchSellLimitLots_b(MAGIC);
   double SchBuyStopLots100  = SchBuyStopLots100_b();
   double SchSellStopLots100 = SchSellStopLots100_b();

   double dy= 0 ;
   double dx=SchBuyLots+SchBuyLots100-SchSellLots-SchSellLots100;
   if (dx!= 0 ) dy= MathAbs (dx);

   double zx=SchBuyLimitLots-SchSellLimitLots;

   if (dx> 0 && dy+zx!=SchSellStopLots100)tt= 1 ; else tt= 2 ;
 
   Alert (dy+zx, "---" ,SchSellStopLots100, "---" ,tt);
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
// ----------------- SchBuyLots() ---------------------------------------------
//  Функция возвращает суммарный лот Бай-ордеров для Магика
//----------------------------------------------------------------
double SchBuyLots_b( int MAGIC) {
   double SchBuyLots= 0 ;
   int i;
   string SMB= Symbol ();
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--) { //Начало цикла
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {}
     else { //начало работы с выбранным ордером
       if ( OrderSymbol ()== SMB && OrderMagicNumber ()== MAGIC){ 
       if ( OrderType ()==OP_BUY) {
        SchBuyLots=SchBuyLots+ OrderLots ();
       }
      }
    } //конец работы с выбранным ордером
  } //Конец цикла
   return (SchBuyLots);
}
// ----------------------------------------------------------------------------

// ----------------- SchSellLots() ---------------------------------------------
//  Функция возвращает суммарный лот Сейл-ордеров для Магика
//-----------------------------------------------------------------
double SchSellLots_b( int MAGIC) {
   double SchSellLots= 0 ;
   int i;
   string SMB= Symbol ();
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--) { //Начало цикла
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {}
     else { //начало работы с выбранным ордером
       if ( OrderSymbol ()== SMB && OrderMagicNumber ()== MAGIC) {
       if ( OrderType ()==OP_SELL) {
        SchSellLots=SchSellLots+ OrderLots ();
       }  
      }  
    } //конец работы с выбранным ордером
  } //Конец цикла
   return (SchSellLots);
}
// -------------------------------------------------------------------------------

// ----------------- SchBuyLots100() ---------------------------------------------
//  Функция возвращает суммарный лот Бай-ордеров для Магика 100
//--------------------------------------------------------------------------------
double SchBuyLots100_b() {
   double SchBuyLots100= 0 ;
   int i;
   string SMB= Symbol ();
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--) { //Начало цикла
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {}
     else { //начало работы с выбранным ордером
       if ( OrderSymbol ()== SMB && OrderMagicNumber ()== 100 ) {
       if ( OrderType ()==OP_BUY) {
        SchBuyLots100=SchBuyLots100+ OrderLots ();
       }
      }
    } //конец работы с выбранным ордером
  } //Конец цикла
   return (SchBuyLots100);
}
// --------------------------------------------------------------------------------

// ----------------- SchSellLots100() ---------------------------------------------
//  Функция возвращает суммарный лот Сейл-ордеров для Магика 100
//---------------------------------------------------------------------------------
double SchSellLots100_b() {
   double SchSellLots100= 0 ;
   int i;
   string SMB= Symbol ();
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--) { //Начало цикла
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {}
     else { //начало работы с выбранным ордером
       if ( OrderSymbol ()== SMB && OrderMagicNumber ()== 100 ) {
       if ( OrderType ()==OP_SELL) {
        SchSellLots100=SchSellLots100+ OrderLots ();
       }  
      }  
    } //конец работы с выбранным ордером
  } //Конец цикла
   return (SchSellLots100);
}
// ----------------------------------------------------------------------------
// ----------------- SchBuyLimitLots() ------------------------------------------
//  Функция возвращает суммарный лот BuyLimit-ордеров для Магика
//------------------------------------------------------------------------------
double SchBuyLimitLots_b( int MAGIC) {
   double SchBuyLimitLots= 0 ;
   int i;
   string SMB= Symbol ();
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--) { //Начало цикла
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {}
     else { //начало работы с выбранным ордером
       if ( OrderSymbol ()== SMB && OrderMagicNumber ()== MAGIC){ 
       if ( OrderType ()==OP_BUYLIMIT) {
        SchBuyLimitLots=SchBuyLimitLots+ OrderLots ();
       }
      }
    } //конец работы с выбранным ордером
  } //Конец цикла
   return (SchBuyLimitLots);
}
// ----------------------------------------------------------------------------

// ----------------- SchSellLimitLots() ----------------------------------------
//  Функция возвращает суммарный лот SellLimit-ордеров для Магика
//-----------------------------------------------------------------------------
double SchSellLimitLots_b( int MAGIC) {
   double SchSellLimitLots= 0 ;
   int i;
   string SMB= Symbol ();
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--) { //Начало цикла
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {}
     else { //начало работы с выбранным ордером
       if ( OrderSymbol ()== SMB && OrderMagicNumber ()== MAGIC) {
       if ( OrderType ()==OP_SELLLIMIT) {
        SchSellLimitLots=SchSellLimitLots+ OrderLots ();
       }  
      }  
    } //конец работы с выбранным ордером
  } //Конец цикла
   return (SchSellLimitLots);
}
// -------------------------------------------------------------------------------
// ----------------- SchBuyStopLots100() -----------------------------------------
//  Функция возвращает суммарный лот BuyStop-ордеров для Магика 100
//--------------------------------------------------------------------------------
double SchBuyStopLots100_b() {
   double SchBuyStopLots100= 0 ;
   int i;
   string SMB= Symbol ();
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--) { //Начало цикла
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {}
     else { //начало работы с выбранным ордером
       if ( OrderSymbol ()== SMB && OrderMagicNumber ()== 100 ) {
       if ( OrderType ()==OP_BUYSTOP) {
        SchBuyStopLots100=SchBuyStopLots100+ OrderLots ();
       }
      }
    } //конец работы с выбранным ордером
  } //Конец цикла
   return (SchBuyStopLots100);
}
// --------------------------------------------------------------------------------

// ----------------- SchSellStopLots100() -----------------------------------------
//  Функция возвращает суммарный лот SellStop-ордеров для Магика 100
//---------------------------------------------------------------------------------
double SchSellStopLots100_b() {
   double SchSellStopLots100= 0 ;
   int i;
   string SMB= Symbol ();
   for (i= OrdersTotal ()- 1 ;i>= 0 ;i--) { //Начало цикла
     if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {}
     else { //начало работы с выбранным ордером
       if ( OrderSymbol ()== SMB && OrderMagicNumber ()== 100 ) {
       if ( OrderType ()==OP_SELLSTOP) {
        SchSellStopLots100=SchSellStopLots100+ OrderLots ();
       }  
      }  
    } //конец работы с выбранным ордером
  } //Конец цикла
   return (SchSellStopLots100);
}
// --------------------------------------------------------------------------------

라인에 주의하십시오(거의 맨 처음에):

 if (dx> 0 && dy+zx!=SchSellStopLots100)tt= 1 ; else tt= 2 ;

어떤 이유로 dy+zx 와 SchSellStopLots100 값이 따로따로 같다면 (경고의 도움으로 확인), 이 표현식에서 더 이상 동일하지 않으며 tt 변수는 2가 아닌 1 값을 취합니다 .

오류를 찾을 수 있도록 도와주세요.

미리 감사드립니다.

 
주말 동안 서버에서 거래 조건이 변경되었습니다... 브로커/네트워크에 연결되지 않은 별도의 터미널에서 테스트하고 특수 유틸리티로 원하는 스프레드를 설정해야 합니다. 테스트 어드바이저 와 올바르게 수행하는 방법에 대한 기사를 찾는 것이 좋습니다.
 
nemo811 :

(알림으로 확인)

ND를 통해 확인하거나 모듈로 차이가 일부 델타보다 작은지 확인하는 것이 좋습니다.
 
splxgf :
ND를 통해 확인하거나 모듈로 차이가 일부 델타보다 작은지 확인하는 것이 좋습니다.

어떤 이유로 dy와 zx를 추가하여 숫자 0.3(현재 시장 상황에 대한 나의 특정 테스트에서)을 제공하는 것은 해당 숫자와 비교할 때 동일하지 않습니다. 저것들. dy+zx를 추가하고 0.3을 얻습니다. 나는 dy+zx를 0.3과 비교한다 - 그것들은 같지 않다.

나는 dy와 zx를 그들이 반환하는 숫자와 비교합니다. 평등은 제대로 작동합니다.

신비.

도와주세요.

 
ramirez17 :

안녕 동지들!

예상치 못한 문제에 봉착했습니다.

어제 테스터는 정상적으로 작동했습니다. 어제 저녁부터 테스터의 모든 전략 버전은 하나의 거래를 열고 1초 또는 몇 분/시간의 기록 후에 테스터가 작업을 완료합니다. 오류가 없습니다.

누군가 찾아왔나요? 말하다

테스터에 로그가 있습니다. 모든 것이 거기에 기록되어 있습니다. 테스터의 로그를 멀리서 읽을 수 있는 텔레파시가 없습니다.