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

 
Craft :


Anatoly, 대단히 감사합니다. 활이 있는 Skype와 같이 여기에 아이콘을 삽입할 수 없는 것이 유감입니다. 모든 것이 간단하고 우아합니다. 그 중 다른 프로그램과의 통신에서. 분석, 나는 이것이 어떻게 되어야 하는지 이해하지만 mql로 작업하는 연습은 아직 충분하지 않습니다. 방법 선택에 대한 힌트를 주셔서 감사합니다. 이해합니다.

마지막으로 이 고문이 한 바에 여러 주문을 하지 않도록 하는 방법을 알려주실 수 있습니까? 친절한 사람들은 이미 힌트를 주었지만 영혼을 속이지 않았습니다.

나는 당신의 문제를 해결하려고 노력했고 여기에 무슨 일이 일어났습니다. 그러나 모든 것에 대해 순서대로.

누구를 비난하고 무엇을해야합니까? 또는 다리가 자라는 곳 ...

Expert Advisor에서 포지션을 열기 위해(따라서 이전 포지션을 닫기 위해) CCI 지표의 다른 설정 이 사용됩니다. 구매를 위한 설정, 나만의 판매를 위한 설정. 내가 이해하는 한, 이것이 요점입니다. 예를 들어, 상승 추세에서는 이익이 "성장"할 수 있도록 구매에 덜 민감한 설정을 사용하는 것이 더 유리합니다(즉, 추세 위치를 더 오래 유지하는 것이 합리적입니다). 이때 매도(상승 추세)의 경우 빠른 진입/퇴장, 예를 들어 조정을 잡으려고 할 때(각각 추세에 반대하는 포지션으로 시장에 진입하기 위해) 보다 민감한 설정이 필요합니다. 적은 시간). 모든 것이 매우 논리적이며 아이디어도 상식이 없는 것은 아니지만 이러한 시스템에서는 하나의 뉘앙스가 발생합니다. 설정의 차이로 인해(사실, 이들은 터미널에 대한 두 개의 표시기임) 두 개의 반대 신호 동시 등장?

파란색 화살표에 대해...

한 막대에 있는 Expert Advisor는 매수와 매도 신호를 모두 수신하고 위에서 썼듯이 한 포지션이 열리면 반대쪽은 반드시 닫혀야 합니다. 그래서 우리는 그러한 그림을 얻고, 매수하라는 명령이 내려지고 매도를 닫습니다. 그때까지 매도가 없기 때문에 어드바이저는 매수를 엽니다. 다음 틱에서 반대 신호가 발생하여 매도하므로 방금 열린 매수가 마감됩니다. 또 다른 관찰, "소시지"(파란색 화살표 더미)만 구매한다는 사실을 알고 계셨습니까? Buy/Sell 메소드의 구현은 제가 알기로는 교과서에서 따온 것으로, 작업이 완료되면 start() 메소드가 return 연산자에 의해 종료되는 특징이 있습니다. 즉, 틱당 하나의 열기/닫기가 발생할 수 있습니다. 따라서 "이중 신호"가 수신되면 모든 트랜잭션이 닫힙니다(닫기 블록 먼저 설명), 그 다음 거래 시작을 위한 블록, 그 안에 구매가 먼저 설명됩니다!!! 그리고 구매 후 start()가 종료되므로 EA는 단순히 판매에 도달할 시간이 없습니다 :))) "정상적인" 단일 명령을 수신할 때까지 루프합니다.

솔루션에 대해...

솔루션이 많지 않습니다.
1. 데도프스키.
우선 아이디어를 "죽일" 수 있고 구매 및 판매에 대해 동일한 매개변수를 설정하기만 하면 문제가 저절로 사라집니다.

2. 복잡하다.
어드바이저에서 주요 추세를 결정하기 위한 알고리즘을 입력해야 하며 따라서 트랜잭션에 다른 "가중치"를 부여해야 합니다. 따라서 다방향 신호를 수신할 때 "가중치"가 더 큰 신호(즉, 추세가 있는 신호)가 우선 적용됩니다.

3. 무제.
다방향 신호를 수신할 때 ...
아무것도 하지 않으려면

 if (Opn_B && Opn_S) return ;

아래 첨부파일에 있는 옵션입니다.
모든 것을 명확하게 설명했기를 바랍니다.
행운을 빕니다 :)))

파일:
11_3_1.mq4  13 kb
 

Volfram 의 게시물은 여러 스레드에 퍼진 것으로 인해 제거되었습니다.

Volfram , 이 목적을 위해 특별히 고유한 분기를 만들었습니다. 당신은 이미 답변을 받았습니다. 충분하지 않다?

추신: Volfram님 의 비밀을 말씀드리겠습니다. 귀하의 아이디어에 대한 분명한 관심이 없다는 것은 이 아이디어가 관심을 받을 가치가 없다는 것을 암시합니다. 따라서 "무료로" 구현하려는 사람이 없었습니다.

 
ToLik_SRGV :

2. 복잡하다.
어드바이저에서 주요 추세를 결정하기 위한 알고리즘을 입력해야 하며 따라서 트랜잭션에 다른 "가중치"를 부여해야 합니다. 따라서 다방향 신호를 수신할 때 더 많은 "가중치"(즉, 추세가 있는 신호)가 있는 신호에 우선 순위가 부여됩니다.

3. 무제.
다방향 신호를 수신할 때 ...
아무것도 하지 않으려면

아래 첨부파일에 있는 옵션입니다.
모든 것을 명확하게 설명했기를 바랍니다.
행운을 빕니다 :)))

내 이정표를 추가 할 수 있습니다 ... :)

저도 교과서로 시작했습니다. 더 간단하게 만들 수 있습니다. 매도 신호에서 매수 마감을 제거하고 매수 신호에서 매도 마감을 제거하는 것으로 충분합니다. Sergey Kovalev의 튜토리얼에서 구현된 스윙 트레이딩을 사용하지 마십시오... 티켓이 아닌 마법으로 포지션을 추적하십시오. 처음에는 그냥 그렇게 하고 조용히 내 아이디어를 테스트했습니다. 다음으로, 나는 이미 작업을 위해 내 자신의 기능을 작성했습니다 ...

추신. 나는 코드를 보지 않았으므로이 EA에 대해 틀릴 수 있습니다 ...

 

함수의 극한값을 찾는 방법을 알 수 없습니다.

값을 저장하는 데이터 배열이 있습니다.

중단점을 찾는 방법 - 250개 요소의 데이터 배열을 사용하여 극단값을 찾고 이러한 극단값이 위치한 요소 번호만 저장합니다.

 

여러분, 이 질문이 있습니다.

추세 감지 기능은 첫 번째 막대의 AC가 두 번째 막대의 AC 보다 더 크지 (즉, 증가 ) 추세가 내려가면 (다른 칠면조는 내려가는 것처럼 보임) 이 경우 0을 반환한다고 명시적으로 명시되어 있습니다. 하락세는 없다... 그런데 고문이 완강하게 외면하는 이유는 무엇일까?


F-tion def. 경향:

 int Trend_BBOsMA ( string sy, int tf)
{
   if (sy== "" || sy== "0" ) sy= Symbol ();
double
   BB    = iCustom (sy,tf, "BB_MA" , 13 , 13 , 0 , 1 ),
   OsMA  = iOsMA   (sy,tf, 9 , 21 , 5 , PRICE_CLOSE , 1 ),
   AC1   = iAC (sy,tf, 1 ),
   AC2   = iAC (sy,tf, 2 ),
   AC3   = iAC (sy,tf, 3 );
   
   if (BB> 0 && OsMA> 0 && AC1>AC2) return ( 1 );
   if (BB< 0 && OsMA< 0 && AC1<AC2) return (- 1 );
   else return ( 0 );
}

충전 열기 확인(초기에 응답하지 않는 추세 확인: trH1trM15 ) - 조건에 대한 추가 실험은 주의를 기울이지 않지만 코드는 작동 중입니다...

 //============================================================================================== 
   // Доливка 1
//==============================================================================================  
//------------------------- Покупка 1 ------------------------   
   if (AddPose1 &&
         trH1 == 1 &&                   // Если часовой и 
         trM15 == 1 &&                 // пятнадцатиминутный тренды восходящие
         Mom5_1>Mom5_2 &&               // найден разворот
         Mom5_2<=Mom5_3 &&             // Моментума
//         Mom5_2<=100.0 &&
//         DeM5_1<=0.6 &&                  // и Демаркер в зоне перепроданности
//         AC1>AC2 &&                    // Ускорение вверх ----------------------- ВОТ ЗДЕСЬ УБРАЛ
         SecondsAfterOpenLastPos( NULL , OP_BUY, 511 )>= 4 * 60
      )
         {
            Magic= 511 ;           // Задаём магик... 
            Lots=GetSizeLot();
            divider= 1 ;
//            if (trH1==10 || trM15==10) divider=2;
            Lots_New=NormalizeLot(Lots/divider, true, NULL );
            New_Comm= "Buy_M5_Стратегия_1_Доливка1" ;   // Задаём комментарий для позиции
            OpenPosition( NULL , OP_BUY, Lots_New, 0 , 0 , Magic, New_Comm);
         }
//------------------------- Продажа 1 ------------------------   
   if (AddPose1 && 
         trH1 ==- 1 &&                 // Если часовой и 
         trM15 ==- 1 &&                 // пятнадцатиминутный тренды нисходящие
         Mom5_1<Mom5_2 &&               // найден разворот
         Mom5_2>=Mom5_3 &&             // Моментума
//         Mom5_2>=100.0 &&
//         DeM5_1>=0.4 &&                  // и Демаркер в зоне перекупленности
//         AC1<AC2 &&                    // Ускорение вниз ------------------------ ВОТ ЗДЕСЬ УБРАЛ
         SecondsAfterOpenLastPos( NULL , OP_SELL, 511 )>= 4 * 60
      )
         {
            Magic= 511 ;           // Задаём магик... 
            Lots=GetSizeLot();
            divider= 1 ;
//            if (trH1==-10 || trM15==-10) divider=2;
            Lots_New=NormalizeLot(Lots/divider, true, NULL );
            New_Comm= "Sell_M5_Стратегия_1_Доливка1" ;   // Задаём комментарий для позиции
            OpenPosition( NULL ,OP_SELL,Lots_New, 0 , 0 ,Magic,New_Comm);
         }
//==============================================================================================

내가 볼 수 없는 것을 볼 수 있는 사람이 있습니까? 고맙습니다.

 
스크린샷에는 BB_MA 표시기가 표시되지 않습니다. 그리고 상위 코드에는 추세 방향 확인이 없습니다. 변수 BB는 항상 하나의 값을 포함합니다. 내가 아는 한 BB_MA 지표는 이동 평균 입니다. 이동 평균의 방향을 결정하려면 다른 양초, 예를 들어 첫 번째 및 두 번째 양초에 2개의 값이 있어야 하며 이 값을 서로 비교해야 합니다. 따라서 상위 코드는 부분적으로만 해당 작업을 수행한다고 말할 수 있습니다.
 
IgorM :

함수의 극한값을 찾는 방법을 알 수 없습니다.

값을 저장하는 데이터 배열이 있습니다.

중단을 찾는 방법 - 250개 요소의 데이터 배열을 사용하여 극단값을 찾고 이러한 극단값이 위치한 요소 번호만 저장합니다.


우리는 배열의 값을 통과하는 루프를 구성합니다. 이전 배열 셀의 값을 현재 셀의 값과 비교 합니다. 더 크면 루프의 다음 반복으로 이동합니다. 요컨대, 배열의 각 후속 셀에 있는 값이 증가하는 한 검색을 계속합니다. 이전 셀보다 작아지자 마자 이전 셀의 번호는 미리 선언된 배열에 저장됩니다. 추세가 반전되어 피크를 찾았기 때문입니다. 이제 추세가 하락하고 있습니다. 이제 다음 셀에 이전 셀보다 큰 값이 포함될 때까지 반복합니다. 이런 일이 발생하자마자 추세가 반전되어 이전 셀의 번호가 미리 선언된 배열에 저장됩니다. 우리는 우울증의 바닥을 찾았습니다. 저점에서 피크를 필터링하기 위해 다른 배열에 숫자를 입력할 수 있습니다. 즉, 모든 배열 값을 완전히 열거한 후 정렬된 데이터를 얻습니다(하나/두 개의 다른 배열에서 원하는 셀 번호).
 
drknn :

우리는 배열의 값을 통과하는 루프를 구성합니다. 이전 배열 셀의 값을 현재 셀의 값과 비교합니다. 더 크면 루프의 다음 반복으로 이동합니다. 요컨대, 배열의 각 후속 셀에 있는 값이 증가하는 한 검색을 계속합니다. 이전 셀보다 작아지자 마자 이전 셀의 번호는 미리 선언된 배열에 저장됩니다. 추세가 반전되어 피크를 찾았기 때문입니다. 이제 추세가 하락하고 있습니다. 이제 다음 셀에 이전 셀보다 큰 값이 포함될 때까지 반복합니다. 이런 일이 발생하자마자 추세가 반전되어 이전 셀의 번호가 미리 선언된 배열에 저장됩니다. 우리는 우울증의 바닥을 찾았습니다. 저점에서 피크를 필터링하기 위해 다른 배열에 숫자를 입력할 수 있습니다. 즉, 모든 배열 값을 완전히 열거한 후 정렬된 데이터를 얻습니다(하나/두 개의 다른 배열에서 원하는 셀 번호).

예, 그것은 당신이 그것을 통해 시도해야한다는 것을 의미합니다 - 이것은 첫 번째 피크까지이며, 그리고 ....... - 다시 나는 이해하지 못합니다.
 
drknn :
스크린샷에는 BB_MA 표시기가 표시되지 않습니다. 그리고 상위 코드에는 추세 방향 확인이 없습니다. 변수 BB는 항상 하나의 값을 포함합니다. 내가 아는 한 BB_MA 지표는 이동 평균입니다. 이동 평균의 방향을 결정하려면 다른 양초, 예를 들어 첫 번째 및 두 번째 양초에 2개의 값이 있어야 하고 이 값을 서로 비교해야 합니다. 따라서 상위 코드는 부분적으로만 해당 작업을 수행한다고 말할 수 있습니다.

아니요, BB_MA - 이것은 황소와 곰의 힘의 값을 더하고 McDuck과 같은 히스토그램으로 표시하는 간결함을 위해 내가 Bears&Bulls_MA라고 부르는 것입니다. 항상, 히스토그램이 0보다 높을 때 - 추세는 위, 아래 - 아래입니다...

따라서 추세 방향을 확인하는 것은 다음과 같습니다.

 if (BB> 0 && OsMA> 0 && AC1>AC2) return ( 1 );

UP 및

 if (BB< 0 && OsMA< 0 && AC1<AC2) return (- 1 );

DOWN을 위해

 else return ( 0 );

플랫용.

저것들. Bears&Bulls_MA가 0보다 크고, OsMA가 0보다 크며, 첫 번째 AC 막대의 값이 두 번째 AC 막대의 값보다 크면 이 함수는 1을 반환합니다.

하락추세의 경우 - 반대의 경우도 마찬가지입니다... 글쎄, 플랫의 경우 차트의 다른 모든 불일치(지금은... 그럼, 제가 파악한 대로 움직임 확인을 가속/감속 및 반전).

포지션 은 명확한 "상승 추세" 또는 "하향 추세"가 있을 때만 개설되어야 합니다... 원칙적으로, 마지막에 (부분적으로) 개설 포지션을 배제하기 위해 통화 이동 속도를 제어하기 위해 AS를 추가하기 전까지는 모든 것이 작동했습니다. 추세 소진 또는 수정에 대한 움직임.

아직 작동하지 않습니다 ... 그리고 그것은 AC입니다

 
IgorM :

예, 그것은 당신이 그것을 통해 시도해야한다는 것을 의미합니다 - 이것은 첫 번째 피크까지이며, 그리고 ....... - 다시 나는 이해하지 못합니다.

아니요 - 루프는 for를 통해 수행되어야 합니다. 나는 그런 스크립트를 스케치하려고 노력할 것이다. 아이디어는 실제로 실행 가능합니다.