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

 
Arles :
문제 해결 방법을 알려주십시오. 동일한 고문이 여러 차트에 매달리고 동시에 두 개의 차트에서 주문을 여는 신호가 있습니다. 단, 2차 주문은 열지 않아야 합니다. EA는 미결 주문을 확인하지만 이것은 도움이 되지 않습니다. 분명히 첫 번째 EA가 주문을 여는 동안 두 번째 EA도 열기 요청을 보내기 때문입니다. 해결책이 있습니까?
여러 차트에서 동일한 여러 Expert Advisors가 어떤 목적으로 사용되는지는 완전히 명확하지 않습니다. - 이러한 이해를 바탕으로 조언을 하는 것이 더 논리적일 것입니다. 그러나 사용 가능한 정보에 따라 거래에 한 명의 조언자만 필요한 경우 설정(어드바이저 내부에 제공된 경우) 또는 "일반" 탭에서 두 번째 조언자의 거래를 금지할 수 있습니다. - 조언자가 거래할 수 있도록 허용 거래 (선택 취소).
그건 그렇고, 모든 Expert Advisors는 병렬이 아닌 순차적으로 하나의 터미널에서 작동합니다. - 1차 작업이 완료되지 않은 동안 2차 작업은 데이터 처리를 하지 않습니다. 따라서 Expert Advisor가 올바르게 작성된 경우, 즉 두 번째 주문은 이 주문을 고려합니다. - 이 시간. 그러나 이것은 Expert Advisors가 작업을 조정하도록 설정된 경우에만 발생합니다. 그들이 동일한 Magic 및 Money Management 회계를 가지고 있다고 가정해 보겠습니다. 그렇지 않으면 "추가" 어드바이저를 비활성화해야만 합니다. “그럼 왜 넣어?”
 
Chiripaha :
여러 차트에서 동일한 여러 Expert Advisors가 어떤 목적으로 사용되는지는 완전히 명확하지 않습니다.

EA는 매달린 쌍만 분석합니다. 신호가 더 일찍 나타난 쌍에서 주문이 열립니다. 그러나 신호가 동시에 두 쌍에 나타납니다. 그리고 이상하게도 2개의 주문이 열렸지만 EA는 일반적으로 열려 있는 주문을 확인하고 두 번째 주문을 열지 않아야 합니다. 그리고 이것은 보증금에 충분한 돈이 없다는 사실에 필요합니다.

1차 작업이 완료되지 않은 동안 2차 작업은 데이터를 처리하지 않습니다.

예, 하지만 첫 번째 사람이 작업을 마치고 주문을 열었을 때 작업을 시작한 두 번째 사람은 잠시 동안 주문이 이미 있는 것을 보지 못합니다. 아니면 주문이 열리기 전에 일하러 갑니다.
--

그리고 한 가지 더: 1차 Expert Advisor Sleep (1000)은 언제 2차를 기다리거나 작동을 시작합니까?

 

좋은 오후에요 여러분!

다음 아이디어를 코딩했습니다.

조건 N1 ..높음[1]이 일부 최대 X를 초과하는 경우

그리고 여기서

조건 N2 다음 150개 캔들 중 첫 번째 캔들의 하이[1]와 로우 사이의 차이 >= 150p.

-------------------------------------------------- ----------------

조치 N1. 이전 주문 삭제

조치 N2 .. 보류 설정

액션 N3. 변수에 값을 할당합니다.

문제 . 보류 중인 주문은 시장에 주문이 없거나 마지막 주문이 현재 바에 없는 경우에만 이루어져야 한다는 사실에도 불구하고. if ( ot ==0 || last_order_bar >0)

조건 N1과 조건 N2가 충족되면 여러 개의 보류 주문 이 동시에 배치됩니다.

보류 중인 주문이 하나만 있으면 됩니다.

-------------------------------------------------- ---

otlast_order_bar 값은 이 코드에서 위에서 계산됩니다.

                                                                                                                        
                                                                                                                
int last_order_bar = 0 ;                                                                                                                 
int ot = OrdersTotal ();                                                                                                                 
                                                                                                                        
 if (ot> 0 ) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if ( OrderSelect (ot- 1 ,SELECT_BY_POS)) //выбрали последний ордер                                                                                                                      
       if ( OrderType ()==OP_SELLSTOP) //проверили тип
        last_order_bar = iBarShift ( Symbol (), 0 ,T ); //запомнили, на каком  баре открыт последний ордер (если он есть)                                                                                                                  
 }                                                                                                                      
 if (High[ 1 ] > X )
 {
   
   for ( int i= 1 ;i< 150 ;i++)
     {
       if ((High[ 1 ]-Low[i])>= 1500 * Point ) //
       break ;         //
             {
     if (ot> 0 ) 
         {
           bool R = OrderDelete(OrderTicket());  
         }
if (R== 0 )                       //если последний выставленный SELLSTOP удален
         {
if (ot== 0 || last_order_bar> 0 )        
int Ticket= OrderSend ( Symbol (),OP_SELLSTOP, 0.1 ,iHigh( Symbol (), 0 , 1 )- 1500 * Point , 1 ,iHigh( Symbol (), 0 , 1 ),iHigh( Symbol (), 0 , 1 )- 1610 * Point , "jfh" , 123 ); //выставить новый SELLSTOP       
if (Ticket> 0 )                 // если SELLSTOP выставлен
 N = (OrderTicket());         //запомнить в глобальную переменную N тикета данного SELLSTOP .
 T = Time [ 0 ];               //запомнить в глобальную переменную время выставления данного SELLSTOP
 X=iHigh( Symbol (), 0 , 1 );   //запомнить в глобальную переменную High свечи N1 после которой был выставлен данный SELLSTOP
   
 }
 }
 }
 }
}
 }   
                        
return ( 0 );
 
Arles :

EA는 매달린 쌍만 분석합니다. 신호가 더 일찍 나타난 쌍에서 주문이 열립니다. 그러나 신호가 동시에 두 쌍에 나타납니다. 그리고 이상하게도 2개의 주문이 열렸지만 EA는 일반적으로 열려 있는 주문을 확인하고 두 번째 주문을 열지 않아야 합니다. 그리고 이것은 보증금에 충분한 돈이 없다는 사실에 필요합니다.

예, 하지만 첫 번째 사람이 작업을 마치고 주문을 열었을 때 작업을 시작한 두 번째 사람은 잠시 동안 주문이 이미 있는 것을 보지 못합니다. 아니면 주문이 열리기 전에 일하러 갑니다.
--

그리고 한 가지 더: 1차 Expert Advisor Sleep(1000)은 언제 2차를 기다리거나 작업을 시작합니까?

첫 번째 질문에: 어드바이저가 올바르게 작성되면 ... 물론, 어드바이저에 배치된(개방) 주문에 대한 수표 가 없는 경우, 그리고 이러한 주문에 대한 회계, 자금 관리의 계산 - 프로그래머의 수준(게으름)에 이미 달려 있습니다 - 그가 이러한 문제를 고려하고 고문에 등록했는지 여부. 모든 것이 올바르게 구현되면 어떤 두려움도 일어나지 않을 것입니다. - 신호 - 네, 동시에 2쌍에 나타날 수 있지만 (이전 게시물 참조) 어드바이저는 순차적으로 작동합니다. 따라서 첫 번째 Expert Advisor가 견적을 처리할 때까지 다음 전문가가 작업을 시작하지 않습니다. - 이런 이유로 이중화를 피하기 위해 순서의 원칙을 지켰다고 생각합니다(병렬 처리의 가능성이 있더라도 - 이것은 별도 논의 주제입니다).

그것은 또한 고문의 수준에 따라 다릅니다. 왜냐하면 당신이 물은 모든 것은 재정에 대한 지식을 필요로 하는 매우 큰 일입니다. 따라서 Expert Advisors는 원칙적으로 "단순"하며 현재 통화로 전체 계정이 제공된다는 사실에 중점을 둡니다. 일반적으로 하나의 통화가 거래됩니다. 예를 들어 여러 통화를 거래하려면 완전히 다른 주문의 예치금이 필요하고 그러한 간단한 시스템은 더 이상 관련이 없습니다. 이것에 대한 예외는 아마도 한 쌍의 한 가격에서 열리고 다른 쌍(또는 여러 쌍)에서 즉시 다시 열릴 때 운영(정확한 용어를 잊어버렸습니다. 다르게 설명하겠습니다) 헤지일 것입니다. 차이점은 다음과 같습니다. 당신 자신. 그러나 이것은 다른 유형의 고문이며 모든 것이 거기에서 고려됩니다(일체형). - 그리고 일반적으로 돈이 쌍의 유동성보다 많지 않다면 한 번에 모든 쌍을 거래하는 것은 나쁜 형태라고 생각합니다. (단, 개인적인 생각입니다) 포트폴리오 등 -이 모든 것은 투기 거래에 필요하지 않습니다. 어떤 이유에서인지 사람들은 이것을 전혀 고려하지 않습니다. - 제조회사나 국제시장에서 거래를 하지 않는 회사가 아니라면 많은 화폐가 전혀 필요하지 않습니다. - 이것이 내가 의미하는 바입니다. 일반적으로 관련성이 없기 때문에 Expert Advisors의 다른 통화에 대한 회계를 위해 그러한 블록을 구현하지 않는 이유입니다.

그리고 두 번째 질문 : 솔직히 말해서, 이 질문은 나 자신에게 열려 있습니다. 나 자신 은 아직 터미널이 Sleep(1000) 기능과 어떻게 반응하는지 완전히 확신하지 못합니다. - 나는 또한 아는 사람들에게 답을 제안합니다. 이론적으로 현재 터미널은 인라인 가격만 처리합니다. 따옴표를 받아들이고 차트와 지표를 그립니다. 그러나 이 Expert Advisor가 "대기"하는 동안 다른 사람에게 차례를 넘기지 않습니다. 하지만 그건 어디까지나 제 추측일 뿐입니다. 아마도 이 "대기열"에 대한 예외는 Expert Advisor를 기다리는 동안 실행을 위해 시작할 수 있는 스크립트입니다. - 같은 질문이 있습니다.

그러나 - 나는 첫 번째 단락의 글쓰기의 정확성을 기반으로 조언자의 작업을 구축함으로써 이러한 무지에서 벗어납니다.

 
solnce600 :

좋은 오후에요 여러분!

다음 아이디어를 코딩했습니다.

조건 N1 ..높음[1]이 최대 X를 초과하는 경우

그리고 여기서

조건 N2 다음 150개 캔들 중 첫 번째 캔들의 하이[1]와 로우 사이의 차이 >= 150p.

-------------------------------------------------- ----------------

조치 N1. 이전 주문 삭제

조치 N2 .. 보류 설정

액션 N3. 변수에 값을 할당합니다.

문제 . 보류 중인 주문은 시장에 주문이 없거나 마지막 주문이 현재 바에 없는 경우에만 이루어져야 한다는 사실에도 불구하고. if (ot==0 || last_order_bar>0)

조건 N1과 조건 N2가 충족되면 여러 개의 보류 주문이 동시에 배치됩니다.

보류 중인 주문이 하나만 있으면 됩니다.

:)) Andrey, 당신은 교과서에서 단순히 씹어 먹는 그런 질문을합니다. 튜토리얼의 "터미널" 예제를 보세요. 주문을 추적하는 방법에 대한 원리와 논리를 자세히 설명합니다. - 그러면 대부분의 질문이 저절로 사라집니다. 일반적으로 교과서는 모든 유능한 고문의 구조가 예시로 제시된다는 사실을 기반으로 합니다. - 그게 아름다움이야. + 프로그래밍에 대한 기본 이론 개념이 제공됩니다. 그러나 여기에는 한 가지 퍼즐이 있습니다. 게으르지 않은 독자를 위해 설계되었습니다. 이는 작성된 내용의 구조를 따릅니다. 저것들. 특정 요점에 대한 질문을 제거하려면 전체 교과서를 읽어야 합니다. 그리고 그것을 다시 말하는 데 동의하는 사람은 거의 없습니다(교과서).

당신은 주문의 더미를 구축합니다. - 쉬워야 합니다. 주문이 있거나 없거나 - 그리고 어떤 바(귀하의 조건에서)가 열리는지는 중요하지 않습니다. - 이러한 복잡성으로 인해 주문 및 조건에 대한 혼란이 발생합니다. - 따라서 찾는 알고리즘 오류 - 모든 프로그래머의 작업. 프로그램 작성의 논리를 변경하십시오. 알고리즘 오류는 저절로 사라집니다.

 
알았어 고마워.
 
Arles :

EA는 매달린 쌍만 분석합니다. 신호가 더 일찍 나타난 쌍에서 주문이 열립니다. 그러나 신호가 동시에 두 쌍에 나타납니다. 그리고 이상하게도 2개의 주문이 열렸지만 EA는 일반적으로 열려 있는 주문을 확인하고 두 번째 주문을 열지 않아야 합니다. 그리고 이것은 보증금에 충분한 돈이 없다는 사실에 필요합니다.

그리고 모든 것이 기본적으로 간단합니다! 첫 번째 고문이 주문을 엽니다. 어떤 스쿠프가 주문을 열었는지가 중요하지 않다면 우리는 둘 다에 조건을 생성할 것입니다. 마지막 오픈 주문을 찾고 그에 따라 오픈 시간을 추출하는 부울 함수를 만듭니다. 여는 시간 이 현재 막대의 여는 시간과 같으면 TRU를 사용하여 함수를 종료합니다 . 함수를 시작의 시작 부분에 놓고 TRU이면 시작을 종료하지만 FALSE이면 EA가 정상적으로 작동합니다.
 
Chiripaha :

그리고 두 번째 질문 : 솔직히 말해서, 이 질문은 나 자신에게 열려 있습니다. 나 자신 은 아직 터미널이 Sleep(1000) 기능과 어떻게 반응하는지 완전히 확신하지 못합니다. - 나는 또한 아는 사람들에게 답을 제안합니다. 이론적으로 현재 터미널은 인라인 가격만 처리합니다. 따옴표를 받아들이고 차트와 지표를 그립니다. 그러나 이 Expert Advisor가 "대기"하는 동안 다른 사람에게 차례를 넘기지 않습니다. 하지만 그건 어디까지나 제 추측일 뿐입니다. 아마도 이 "대기열"에 대한 예외는 Expert Advisor를 기다리는 동안 실행을 위해 시작할 수 있는 스크립트입니다. - 같은 질문이 있습니다.

그러나 - 나는 첫 번째 단락의 글쓰기의 정확성을 기반으로 조언자의 작업을 구축함으로써 이러한 무지에서 벗어납니다.



내가 이해하는 한, Sleep() 이 처리될 때 Expert Advisor는 단순히 잠이 듭니다. 그 작업은 중단되었으며 현재 전문가는 견적을 받지도 않고 아무 반응도 하지 않습니다. 따라서이 터미널은 "대기열"을 다른 것으로 전송합니다 ..

동의하지 않는 사람이 있으면 저를 수정하십시오!

 
hoz :


내가 이해하는 한, Sleep() 이 처리될 때 Expert Advisor는 단순히 잠이 듭니다. 그 작업은 중단되었으며 현재 전문가는 견적을 받지도 않고 아무 반응도 하지 않습니다. 따라서이 터미널은 "대기열"을 다른 것으로 전송합니다 ..

동의하지 않는 사람이 있으면 저를 수정하십시오!

동의할 준비가 되지 않았습니다. - 이러한 상황에서 금전과 직위의 고문이 작업과 계산의 정확성을 유지하는 논리가 손실되기 때문입니다. - 이 시간. 두번째. - 예를 들어 내 조언자가 100밀리초 동안 잠을 자고 그 시간에 다른 조언자가 작동하기 시작하면 이 100밀리초가 지나면 다른 조언자가 작업을 중지하고 ... 중간에 이것으로 그리고 끝없이 ... 반면에. 나는 Expert Advisors에서 각 작업 블록에서 몇 분 동안 여러 번 "잠자기"를 보내는 것을 보았습니다. - 그렇다면 이때 다른 올빼미들이 모두 작동하지 않는다면, 역시 어딘지 모르게 잘못된 것입니다. - 따라서 질문은 매우 관련이 있습니다. 이 순간 일의 논리를 이해하고 싶습니다. 그러나 공식 문서에서 자세한 설명을 찾지 못했습니다.

그러나 나는 두 가지 악 중에서 후자를 택할 것이다. 이 경우, 나는 내가 확신하는 올빼미를 그냥 둘 것입니다. 이것이 완료되지 않으면 문제가되지 않습니다. 작업 속도가 느려지더라도 최소한 재 계산의 정확성이 유지됩니다.

문제는 보이는 것만큼 사소하지 않습니다. - 사실은 내 실험에서 알 수 있듯이 " 고문이 거래하도록 허용 " 확인란이 선택 취소되어 있으면 고문의 작업이 중지되지 않고 모든 계산도 각 틱에서 수행됩니다. 어드바이저의 거래가 서버에 표시되지 않을 뿐입니다. 그러나 이러한 계산에서 이러한 "슬립"이 꽉 차면(완전히 정확하지는 않음) 그러한 고문이 5-10명이라면 현재 거래 중인 현재 고문의 실행을 구체적으로 늦출 수 있습니다.

예, 일부 프로그래머는 거래 권한을 제어하고 이를 기반으로 올빼미의 작업을 건너뜁니다. 그러나 그렇지 않은 경우가 더 많습니다. 코드가 닫히면 작업 속도가 느려지는지 여부(특히 어떤 올빼미인지)를 전혀 이해할 수 없습니다. - 이제 포럼 검색에서 이 주제를 살펴보겠습니다. 뭔가 느려졌습니다.

생각나게 하고 업데이트한 질문에 대해 Arles 에게 감사드립니다. 이전에는 이 주제에 대해 작성된 내용을 이해하기에 충분한 경험이 없었습니다. 이제 다시 눕겠습니다.

 
Arles :

EA는 매달린 쌍만 분석합니다. 신호가 더 일찍 나타난 쌍에서 주문이 열립니다. 그러나 신호가 동시에 두 쌍에 나타납니다. 그리고 이상하게도 2개의 주문이 열렸지만 EA는 일반적으로 열려 있는 주문을 확인하고 두 번째 주문을 열지 않아야 합니다. 그리고 이것은 보증금에 충분한 돈이 없다는 사실에 필요합니다.

예, 하지만 첫 번째 사람이 작업을 마치고 주문을 열었을 때 작업을 시작한 두 번째 사람은 잠시 동안 주문이 이미 있는 것을 보지 못합니다. 아니면 주문이 열리기 전에 일하러 갑니다.
--

그리고 한 가지 더: 1차 Expert Advisor Sleep(1000)은 언제 2차를 기다리거나 작업을 시작합니까?

작은 보증금으로 여러 쌍이 거래되지 않습니다(세속적인 조언).

기술적으로 다른 Expert Advisors가 총 주문 수를 고려하기 위해 다음 계획을 시도할 수 있습니다.

     int li_total - OrdersTotal ();
     if (li_total == 0 ) Sleep ( 1000 );
    li_total - OrdersTotal ();
     if (li_total == 0 ) OrderSend ();

얼마나 명확하게 작동할지 모르겠습니다(m / y 2가 작동해야 함). 터미널의 전역 변수를 통해 "세마포어" 순차 작업을 구성하는 것이 더 안정적입니다. 그런 다음 "드럼으로"얼마나 많은 고문이 병렬로 일할 것인지.

사유: