[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 616

 
당연히 당신이 옳습니다. 막대당 한 번만 판독하는 코드가 이미 있다고 가정했습니다.
 
sllawa3 :
내 생각에는 내가 옳다 .. 나도 의심이 든다 ...

대략 이런 방식으로 자기자본을 추적할 수 있으므로 자기자본 이익의 주어진 비율에 도달하면 모든 포지션을 닫고 주문을 삭제합니다.

 //--------------------------------------------------------------
// Описание глобальных переменных советника
// ----------------- Трал эквити -------------
extern double   PercentEquityForClose= 15 ;
double          Equ_OLD,
               Equ_NEW,
               EquPerc,
               Equ_Start;

// ---- Дальнейшее описание глобальных переменных советника

//==========================================================

int init()                             // Функция init
{
   Equ_OLD=AccountEquity();
   Equ_Start=Equ_OLD; 
   EquPerc=Equ_Start/ 100 *PercentEquityForClose;
   
// ---- Дальнейший код функции ----

   return ;                             // Выход из init() 
}

//==========================================================
// ---- В функции слежения за событиями ----
// ---- вызываемой из функции start ----

   Equ_NEW=AccountEquity();                               // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
             if (Equ_NEW>=Equ_OLD+EquPerc)                 // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit( NULL , - 1 , - 1 );     // то закрываем все позиции
                  DeleteOrders( NULL , - 1 , - 1 );             // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

또 무릎을 꿇고 작성해서 오타가 있을 수 있습니다...
각 막대의 형평성 변화를 추적하려면 새 막대 가 열리는지 확인하는 것으로 충분합니다. 그렇다면 다음 코드를 실행합니다.

   Equ_NEW=AccountEquity();                               // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
             if (Equ_NEW>=Equ_OLD+EquPerc)                 // Если эквити увеличилось по отношению к своему прошлому значению на EquPerc процентов,
               {                                         
                  ClosePosFirstProfit( NULL , - 1 , - 1 );     // то закрываем все позиции
                  DeleteOrders( NULL , - 1 , - 1 );             // и удаляем все ордера
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

이런게 있는거 같은데...

 
Roger :
당연히 당신이 옳습니다. 막대당 한 번만 판독하는 코드가 이미 있다고 가정했습니다.
아니요, 아니요, 하지만 위에서 각 틱 의 에퀴티를 확인하기 위해 뭔가를 썼습니다. 신규바 오픈 여부를 확인하는 것으로 충분하고, 그렇다면 자본금을 확인해보는 것도... 어렵지 않은 것 같아요...
 
주식이 잔액보다 높다면 .. 열려 있는 모든 것을 마감하기 위해 에퀴티를 증가에서 감소로 변경하는 데 관심이 있습니다.
 
sllawa3 :
주식이 잔액보다 높다면 .. 열려 있는 모든 것을 마감하기 위해 에퀴티를 증가에서 감소로 변경하는 데 관심이 있습니다.

다음은 새 막대를 정의하는 함수입니다.

 //+------------------------------------------------------------------+
//|  возвращает признак появления нового бара для указанного периода |
//+------------------------------------------------------------------+
bool isNewBar( int timeFrame)
   {
   bool res=false;
   
   // массив содержит время открытия текущего (нулевого) бара
   // по 7 (семь) таймфреймам
   static datetime _sTime[ 7 ];  
   int i= 6 ;
 
   switch (timeFrame) 
      {
       case 1   : i= 0 ; break ;
       case 5   : i= 2 ; break ;
       case 15 : i= 3 ; break ;
       case 30 : i= 4 ; break ;
       case 60 : i= 5 ; break ;
       case 240 : break ;
       case 1440 : break ;
       default :  timeFrame = 1440 ;
      }
//----
   if (_sTime[i]== 0 || _sTime[i]!=iTime( Symbol (),timeFrame, 0 ))
      {
      _sTime[i] = iTime( Symbol (),timeFrame, 0 );
      res=true;
      }
      
//----
   return (res);   
   }
   

... 나는 자본이 잔액보다 높다면 자산을 증가에서 감소로 변경하는 데 관심이 있습니다. 열려 있는 모든 것을 닫으려면 ..

그런 다음 각 틱 의 에퀴티를 확인해야 합니다. 결국, 예를 들어 시간 단위로 일하는 경우 다음 형평성 확인 1시간 전에 바로 이 형평성이 이미 절망적으로 처질 수 있습니다...

따라서 우리는 자기자본이 몇 퍼센트 증가했는지 비교하는 것이 아니라 Equ -OLD 변수에 기록된 마지막 틱의 상태와 관련하여 어리석은 증가 또는 감소를 Equ_NEW 의 현재 값과 비교합니다.

 
sllawa3 :
주식이 잔액보다 높다면 .. 열려 있는 모든 것을 마감하기 위해 에퀴티를 증가에서 감소로 변경하는 데 관심이 있습니다.

다음과 같은 곳:

   Equ_NEW=AccountEquity();                               // С новым тиком запоминаем текущее значение эквити
   if (Equ_OLD!=Equ_NEW)                                 // Если новое значение не равно старому, то
         {
             if ( NormalizeDouble (Equ_NEW-Equ_OLD, 8 )< 0 )     // Если эквити уменьшилось по отношению к своему прошлому значению,
               {                                         
                  ClosePosFirstProfit( NULL , - 1 , - 1 );     // то закрываем все позиции
                  DeleteOrders( NULL , - 1 , - 1 );             // и удаляем все ордера.
                  Equ_NEW=AccountEquity();               // Запоминаем текущее значение эквити
                  Equ_OLD=Equ_NEW;                       // и заносим его в "прошлое" значение для проверки на изменение на след. тике
               }
         }

// (NormalizeDouble(Equ_NEW-Equ_OLD,8) <0 ) - возможно здесь нужно сравнивать не с нулём, а с каким-то числом, 
                                         // а то может в последующем и не дать увеличиться балансу, 
                                         // постоянно закрывая вновь открываемые позиции (они ведь требуют залога)

그러나 이것은 기성 코드가 아니라 생각을 위한 음식일 뿐입니다...

 
drknn :

틀림없이. 이것만 스톱이 아니라 보류 중인 주문이라고 합니다. 터미널을 엽니다. 그 안에 F1 키를 누릅니다. 나타나는 창에서 내용 - 거래 - 주문 유형을 엽니다.

))) 감사합니다. 하지만 펀드 후, 매수 및 매도의 실행은 거래 대신 당황/비정상적이며, 뭔가 혼란스러울 때 - 의심을 없애기 위해 어리석은 질문을 주저하지 마십시오. )))
 

말하다 . 딜러의 소수점 이하 자릿수는 다섯 자리입니다. 시가에서 n,bars를 뺀 값 을 구해야 합니다 .iOpen(NULL,0,n) 함수는 소수점 이하 네 자리만 제공합니다(인쇄를 통해 얻은 판독값). 문제를 해결하는 방법. 미리 감사드립니다.

 
pips500 :

말하다 . 딜러의 소수점 이하 자릿수는 다섯 자리입니다. 시가에서 n,bars를 뺀 값을 구해야 합니다.iOpen(NULL,0,n) 함수는 소수점 이하 네 자리만 제공합니다(인쇄를 통해 얻은 판독값). 문제를 해결하는 방법. 미리 감사드립니다.

Print()는 소수점 이하 4자리까지 반올림합니다. 이중 유형을 콘솔에 올바르게 인쇄하려면( iOpen() 이 경우 소수점 이하 5자리의 정확도로 반환함 ) DoubleToStr() 함수를 사용해야 합니다.

문자열 DoubleToStr ( 이중 값, 정수 숫자)
숫자 값을 지정된 정밀도 형식으로 숫자의 문자 표현을 포함 하는 텍스트 문자열 로 변환합니다.

옵션:

value   -   Величина с плавающей точкой.

digits   -   Формат точности, число цифр после десятичной точки (0-8).

 
sllawa3 :
주식이 잔액보다 높다면 .. 열려 있는 모든 것을 마감하기 위해 에퀴티를 증가에서 감소로 변경하는 데 관심이 있습니다.

그리고 어떻게 작동하는지에 대한 예가 여기 있습니다... 저는 특별히 각각의 새로운 바에서 포지션을 열었습니다... 그것은 "DC 킬러"로 밝혀졌습니다... :)


첨부된 테스터의 보고서에는 제한이 없고 각 틱의 개시 위치가 미친 비율입니다... 그리고 손실이 없습니다 :) 유감스럽게도 아무도 당신이 그렇게 일하도록 허용하지 않을 것입니다...

다음은 보고서의 사진입니다.


그러한 "습격"으로 나는 거의 손실 없이 많은 돈을 모았고, 테이크에 도달할 시간조차 없었습니다(상단에서 볼 수 있습니다).