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

 
Vinin :
init()에서 항상 시장 환경을 사용할 수 있는 것은 아님을 잊지 마십시오.
솔직히 이 소식이 무척 궁금했습니다. 어떤 조건에서 시장을 이용할 수 없을지 상상해 보았습니다. 환경: 어드바이저가 켜진 순간 연결이 끊어지거나 어드바이저가 토요일이나 일요일에 시작된 경우와 같을 수 있습니다. 나는 이런 유형의 문제를 발견하지 못했습니다. 한편으로 그들은 init()에서 값을 찾는 과정을 반복할 수 있다고 말하지만 init()은 시간이 제한적이라는 것을 알았습니다. 새로운 막대(최소 M1)가 나타날 때 start() 시작 시 시장에서 값을 찾을 수 있습니다. 환경, 그것은 모든 틱 보다 낫습니다.
 
Pacman :


제 코드를 분석해 주셔서 대단히 감사합니다. 시간을 내주셔서 감사합니다.

...

그리고 while 문은 값이 참일 때 작동합니다. 그것은 거짓 값을 받아들이지 않는 것으로 나타났습니다.

동안 조건을 min으로 지정해야 합니다. 예를 들어 두 개의 값을 취할 수 있습니다. 플래그(참 또는 거짓). 상수(true)가 있고 조건이 없으면 while이 필요하지 않습니다. while(true)과 괄호를 제거하면 결과가 동일합니다.
 
감정인을 위한 질문입니다. OrderSend() 에 대한 도움말에서 슬리피지는 3으로 대체되었습니다. 이것은 4자리 따옴표에 대한 예입니까? 5자리 문자의 경우 3을 남겨둘 수 있습니까? 아니면 30이 필요한가요?
 
paladin80 :
감정인을 위한 질문입니다. OrderSend()에 대한 도움말에서 슬리피지는 3으로 대체되었습니다. 이것은 4자리 따옴표에 대한 예입니까? 5자리 문자의 경우 3을 남겨둘 수 있습니까? 아니면 30이 필요한가요?

5자리의 경우 30이 필요합니다.

나는 이러한 구성을 각 어드바이저의 init()에 삽입합니다. 그러면 DC의 4개 또는 5개 기호에서는 중요하지 않습니다. 다음을 권장합니다.

   if ( Digits == 3 || Digits == 5 ){myPoint= Point * 10 ; slpg=slpg* 10 ;}
   else myPoint= Point ; 
 
테스트 속도를 높이는 것이 가능한지 누가 알겠습니까?
 

안녕하세요. 말해봐 - 매분 수직선 을 그리는 작업은 가치가 있습니다. 그림을 분 단위로 묶는 것이 아니라 분당 개봉 가격으로 묶는 방법. 어려움은 분의 시가를 비표준 시간에 식별해야 한다는 것입니다. 분 아닙니다. 그런 코드를 작성했는데 칠면조가 비표준 시간에 걸려 있으면 분의 시작 가격을 입력하는 방법을 이해하지 못합니다.

new_Minute=TimeMinute(시간[i]) != TimeMinute(시간[i+1]); // 새로운 분

Ind_Buffer_0[i]=0

if(new_Minute && Period()<30) Ind_Buffer_0[i]=max;

...그리고 객체를 통한 표준 그리기.

누군가가 가능하다면 무엇을 할 수 있는지 말해 줄 수 있습니까?

 
Lonely_man :

안녕하세요. 말해봐 - 매분 수직선을 그리는 작업은 가치가 있습니다. 그림을 분 단위로 묶는 것이 아니라 분당 개봉 가격으로 묶는 방법. 어려움은 분의 시가를 비표준 시간에 식별해야 한다는 것입니다. 분 아닙니다. 그런 코드를 작성했는데 칠면조가 비표준 시간에 걸려 있으면 분의 시작 가격을 입력하는 방법을 이해하지 못합니다.

new_Minute=TimeMinute(시간[i]) != TimeMinute(시간[i+1]); // 새로운 분

Ind_Buffer_0[i]=0

if(new_Minute && Period()<30) Ind_Buffer_0[i]=max;

...그리고 객체를 통한 표준 그리기.

누군가가 가능하다면 무엇을 할 수 있는지 말해 줄 수 있습니까?

수직선 에는 좌표가 없습니다 - 가격.
 
paladin80 :
동안 조건을 min으로 지정해야 합니다. 예를 들어 두 개의 값을 취할 수 있습니다. 플래그(참 또는 거짓). 상수(true)가 있고 조건이 없으면 while이 필요하지 않습니다. while(true)과 괄호를 제거하면 결과가 동일합니다.


while 문을 제거하면 계속 문이 어떻게 작동합니까?

결국 오류가 발생하면 조건 확인 및 주문을 여는 것을 반복해야 합니다.

 if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
  continue ;                               // Повторная попытка
 return ;                                 // Выход из start()

계속 문은 가장 가까운 외부 while 또는 for 루프 문의 시작 부분으로 제어를 전달하여 다음 반복이 시작되도록 합니다.

내가 뭔가를 이해하지 못하는 건 아닐까?

 

안녕하세요.

내 거래 전략은 이미 형성된 끝에서 두 번째 막대[숫자 1]에서 보류 중인 주문 을 열도록 설계되었습니다. 저것들. 그는 포지션(바이스톱 및 셀스톱에 대한 보류 주문)을 열고 가격이 첫 번째 막대의 가격 범위의 고가/저가를 20포인트 초과하면 트리거됩니다(개시 가격).

동시에 다음을 기반으로 트리거되지 않은 보류 중인 주문의 자동 삭제를 제공합니다. 새로운 막대 번호 1이 형성되면 그에 따라 보류 중인 주문/주문의 시작 가격이 다음과 일치하지 않습니다. 새로운 현재 막대의 고가/저가 1 +/- 20포인트(두 인접 막대의 고가/저가 거의 일치하지 않기 때문에 가장 가능성이 높음).

그러나 어떤 이유로 그는 먼저 두 위치를 모두 열었지만 몇 초 후에 그 중 하나를 닫습니다(1번의 새 막대는 아직 형성되지 않았지만).

여러분, 전문가 여러분, 저는 초보자이며 아마도 약간의 뉘앙스를 고려하지 않을 것입니다. 어디가 오류인지 알려주세요.

 RefreshRates ();
for ( int n= 1 ;n<= OrdersTotal ();n++)             //цикл перебора всех имеющихся ордеров
{
   if ( OrderSelect (n- 1 ,SELECT_BY_POS)==true)   //если найден ордер, то...
  {
     if (( OrderType ()== 4 )&& ( OrderOpenPrice ()!= High[ 1 ]+ 20 * Point ))                       // проверяем его тип (buystop/sellstop), если его тип buystop и цена покупки не совпадает с максимумом текущего 1-го бара, то..
      {
           OrderDelete ( OrderTicket ());                                                   // удаляем его
         
       }
     if (( OrderType ()== 5 ) && ( OrderOpenPrice ()!= Low[ 1 ]- 20 * Point ))                       // если его тип sellstop и цена продажи не совпадает с минимумом текущего 1-го бара, то ...
    {      
           
             OrderDelete ( OrderTicket ());                                                 //удаляем его
         
    }
  }
}
파일:
 

분수를 비교할 때는 반드시 유효숫자로 정규화해야 합니다.

주문을 삭제할 때는 처음부터가 아니라 끝부터 계산해야 합니다.