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

 
artmedia70 :
현명한 개발자. 스크립트를 호출할 수 있다면 그 안에 전표를 로드할 것입니다. - 그것도 불가능합니다. 한 번에 많은 어드바이저가 필요하지 않기 때문입니다... 우리는 간단한 방법을 보지 않을 것입니다 :)
 

로드 프로그래머. 당신이 나를 도울 수.

입력 변수에서

extern bool UseHourTrade = True;
외부 int FromHourTrade = 0;
extern int ToHourTrade = 23;

정수 시작(){
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
댓글 ("거래의 시간이 오지 않았습니다!");
리턴(0);
}
}

다른 변수 UseHourTrade2, FromHourTrade2, ToHourTrade2로 거래를 해야 하는 두 번째 기간을 추가하고 싶습니다.

도와주세요. 시작 기능에 추가해야 할 사항을 알려주세요. 나는 아직 아무것도 시도하지 않았습니다. 작동하지 않습니다.

미리 감사드립니다. 보리스.

 
cyclik33 :
 extern bool UseHourTrade = True,
            UseHourTrade2 = True;
 extern int FromHourTrade = 0,
            FromHourTrade2 = 0,
            ToHourTrade = 23,
            FromHourTrade2 = 23;

int start(){
   if (UseHourTrade){
   if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) {
 Comment ( "Time for trade has not come else!" );
 return ( 0 );
 }
   if (UseHourTrade2){
   if (!(Hour()>=FromHourTrade && Hour()<=FromHourTrade2)) {
 Comment ( "Time for trade has not come else!" );
 return ( 0 );
 }
 }

아마 그런 것 같아요.

추신 "SRC" 코드 삽입 버튼을 사용하면 읽기 불편합니다.

 
Abzasc :

그러한 계획의 동결.

코드 맨 끝에 있는 표시기는 다른 표시기의 플래그 역할을 하는 개체를 만듭니다.

개체를 만든 후 표시기를 5초 동안 "잠자기 상태로 전환"한 다음 개체를 삭제하고 1초 동안 잠자기 상태로 전환해야 합니다. 60까지, 그 후에는 마지막 리턴으로 이동하고 새로운 틱으로 다시 시작합니다.

그렇게 하려고 해요

그것은 분명히 while이 끝날 때까지 멈춥니다.

스레드가 스마트하다는 메시지를 표시합니다.


논리는 다음과 같습니다. 두 표시기 모두 개체의 이름과 하나 이상의 추가 개체를 알고 있습니다.

첫 번째 객체는 객체를 생성하고 존재하는 경우 항상 아무 것도 하지 않습니다. 시작의 맨 처음에 이 종료 조건(return;)을 작성합니다.

두 번째는 객체를 읽고, 자체 작업을 수행하고, 추가 객체를 노출합니다.

첫 번째 개체는 주 개체를 보지 않고 아무 작업도 수행하지 않고 종료하고 즉시 두 번째 개체(추가 개체)를 찾고 개체가 생성된 시간 을 읽고(두 번째 칠면조는 생성하는 동안 설명에 넣음) 필요한 일시 중지를 계산합니다. (60초) 삭제하고 개체가 없습니다. 작업할 수 있습니다....

 
Abzasc :
지표에서 작동하지 않습니다. 왜 이런 식으로 하는지 이해가 되지 않습니다. 분명히, 지속적으로 작동하는 지표는 최면을 걸어야 합니다. :)

그 이유는 표시기가 인터페이스 스레드에서 작동하기 때문에 표시기를 잠자기 상태로 둘 수 없기 때문입니다. "속도를 늦출" 수 있다면 그 순간에 터미널의 어떤 버튼도 누를 수 없기 때문입니다(예: " 새 주문" 또는 주문 마감 등
이 주제의 또 다른 미묘함은 테스터에 관한 것입니다. 실생활에는 Expert Advisors를 위해 별도로 생성된 여러 스레드, 하나의 인터페이스 스레드가 있으며(이 때문에 결과 없이 속도가 느려질 수 있음) 테스터에서는 모두를 위한, 모두를 위한 것입니다. :)
따라서 테스트 모드 에서 Sleep() 함수는 이와 같이 특정한 방식으로 작동합니다. 테스터의 흐름을 잠자기 상태로 전환하면 모든 것이 각각 작동을 멈추고 어드바이저와 지표, 그리고 물론 틱 생성도 멈춥니다. 따라서 아이디어를 올바르게 이해했다면 데모에서만 테스트할 수 있으며 인터페이스 스트림의 속도를 늦추려면 예를 들어 다음 기능을 사용할 수 있습니다.

 //+------------------------------------------------------------------+
//| MySleep function                                                 |
//+------------------------------------------------------------------+
void MySleep( int sec){
   int pause = TimeSeconds( TimeLocal ()) + sec;
   if (pause >= 60 )pause = pause - 60 ;
   while (TimeSeconds( TimeLocal ()) != pause){}
}
//+------------------------------------------------------------------+
 
xrust :


원하는 일시 정지(60초)를 카운트다운합니다.

시도 할 수 있지만 가장 중요한 것은 일시 중지 하는 방법입니다 ... 나는 이것에 붙어 있습니다.
 

주의 깊게 읽고 모든 것을 작성했으며 그래프 개체를 사용할 필요가 전혀 없습니다. 전역으로 얻을 수 있습니다 ....

 
ToLik_SRGV :

그 이유는 표시기가 인터페이스 스레드에서 작동하기 때문에 잠자기 상태로 둘 수 없기 때문입니다...

이제 ... 더 밝아졌습니다. 감사합니다.


젠장, 어떤 종류의 돌. 하나의 지표에 넣을 수 없고 잠자기 상태로 둘 수도 없습니다... 전역 변수 로 휘젓도록 노력하겠습니다.
 
xrust :

주의 깊게 읽고 모든 것을 작성했으며 그래프 개체를 사용할 필요가 전혀 없습니다. 전역으로 얻을 수 있습니다 ....

도착한 것 같습니다. 평생 삭제도 타이머입니다. 하지만 다시 읽어보겠습니다 :)
 
Abzasc :

... 전역 변수를 휘젓도록 노력하겠습니다.

그러나 이것은 정확합니다. Rustam도 이에 대해 암시한 것 같습니다. 스레드를 일시 중단하는 것은 MQL뿐만 아니라 모든 프로그래밍 언어에서 일반적으로 수행해야 하는 마지막 조치이기 때문입니다.