MQL4에서 원칙적으로 문제를 해결할 수 있습니까? - 페이지 2

 

코드를 가져오도록 합시다. 저녁까지 알아낼 것입니다.

개인회생 가능합니다 :)

 
tara :
코드를 가져오도록 합시다. 저녁까지 알아낼 것입니다.

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#속성 링크 "http://www.metaquotes.net"

//#포함 <WinUser32.mqh>
//int whwnd;
//#include <stdlib.mqh> // 표준 라이브러리
더블 b;
이중 퍼센트;
이중 최대 백분율 = 0;
정수 TimeToresume = 10;
정수 선택 시간 = 1;
문자열 상태, status1;
정수 합계;
정수 마법[100];
intcol=0;
임시 콜 = 0;
//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{

리턴(0);
}
//+----------------------------------------------- --------------------+
//| 전문가 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//----
//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 전문가 시작 기능 |
//+----------------------------------------------- --------------------+
정수 시작()
{
// while(!IsStopped()) // 사용자가..
/// { // ..프로그램 실행을 중지하지 않습니다.
// 새로고침률();
b = AccountBalance()/100;
퍼센트 = AccountProfit()/b;
if (maxpercent > 퍼센트) maxpercent = 퍼센트;
TimeResume = TimeLocal();
if (percent*(-1) > 1) status = "Freeze Active";
else 상태 = "실행 중";
총계=주문총계();
열=0;
for (int i=total; i>0; i--) { // 배열의 각 요소에 각 열린 주문의 마법 값을 할당합니다.
주문선택(i-1,SELECT_BY_POS,MODE_TRADES);
매직[i] = OrderMagicNumber();
// 인쇄("Magic " + i+" " +magic[i]);
}
for (int k = 1; k <= 1; k++){ // 첫 번째 열기 주문의 마법을 후속 주문과 비교합니다.
tempcol = 마법[k];
(int l = 1; l<=total;l++){
if (tempkol != 마법[l]) kol++;
}
}
if(kol >= 2){ // 2개 이상의 EA가 이미 거래에 들어간 경우
GlobalVariableSet("고정1",200) ; // 다른 EA는 이 전역 변수를 따라야 합니다.
GlobalVariableSet("Freeze2",200); // 거래를 시작하지 않지만 이 때까지 주문을 열 시간이 있습니다.
상태1="테스트2"; //GlobalVariableSet("Freeze1",200) 어드바이저는
} // 터미널의 큐
댓글( AccountProfit()
,"\N"
,"DrawDown ", NormalizeDouble (퍼센트,1)*(-1), " %", " MaxDrawDown ", NormalizeDouble (maxpercent,1)*(-1), " % "
, TimeToresume
,"\N"
,상태," ",퍼센트*(-1)
,"\N"
,"주문 총계",총계
,"\N"
,OrderSymbol()," Magic ", OrderMagicNumber()," ",kol
,"\n"," ",상태1
);
반품;
}

//+----------------------------------------------- ------ --------------------+

엄격하게 판단하지 마십시오. 제가 마지막으로 porgram을 작성한 것은 학창시절 BASIC의 Sinclair에서였습니다.


 
Zakyza :


MQL4를 사용하여 관리 EA의 코드가 먼저 실행되고 다른 모든 코드가 실행되도록 우선 순위 시스템을 설정할 수 있습니까?


물론 당신은 할 수.

"마스터-슬레이브" 방식에 따라 고문의 작업을 구성합니다.

 
avtomat :


물론 당신은 할 수.

"마스터-슬레이브" 방식에 따라 고문의 작업을 구성합니다.


더 자세히 구성하는 방법을 알려주세요. 거래 전문가 고문은 전역 변수의 값을 변경함으로써만 영향을 받을 수 있으며 , 대기 후 내 "관리자"가 설계할 때 이 GlobalVariableSet("Freeze1",200) 변수를 수신합니다. 그의 차례, 거기에 200을 쓴다.
 
Zakyza :

더 자세히 구성하는 방법을 알려주세요. 거래 Expert Advisors는 전역 변수의 값을 변경해야만 영향을 받을 수 있으며 , 대기 후 내 "관리자"가 설계할 때 이 GlobalVariableSet("Freeze1",200) 변수를 수신합니다. 그의 차례, 거기에 200을 쓴다.

당신의 매니저가 매니저라면 왜 일종의 대기열을 기다리고 있습니까?

추종자는 자신의 것을 예상해야합니다. 관리자는 GV 거래 금지를 입력했습니다. 그들은 앉아 있고 침묵합니다 (추종자는 "유휴 상태로 앉아 있지 않은 경우"첫 번째 눈금으로 글로벌 플래그를 확인했습니다."라고 YavolGerGeneral이 말했습니다. ))...

GV 플래그에 액세스하기 위해 줄을 서서 기다리는 관리자가 있는 이유는 무엇입니까?

 
이 모든 것은 한 명의 고문이 수행합니다.))) 적어도 100 쌍을 채워야합니다.)))
 
artikul :
이 모든 것은 한 명의 고문이 수행합니다.))) 적어도 100 쌍을 채워야합니다.)))

글쎄, 우리가 말하는 것은 그것이 아닙니다 ...
 

주인

 //+------------------------------------------------------------------+
int deinit()
  {
       GlobalVariableSet (work, 0 );   // запрещение работы ведомым
   return ( 0 );
  }
//+------------------------------------------------------------------+
.....

int start()
   .....

   work= GlobalVariableGet (work);

   if ( work== 0 && всё_хорошо )   GlobalVariableSet (work, 1 );   // разрешение работы ведомым

   if ( work== 1 && всё_плохо )     GlobalVariableSet (work, 0 );   // запрещение работы ведомым

// можно организовать систему запретов/разрешений любой сложности   

   .....

노예

.....

int start()


   work= GlobalVariableGet (work);

   if ( work== 0 )   { стоп } ;    // здесь возможны некоторые действия для завершения текущих процессов

   if ( work== 1 )   { работа };   // ведомым разрешена работа -- можно работать в нормальном режиме

.....

내가 분명히 했길 바랍니다.

 
avtomat :

주인

노예

내가 분명히 했길 바랍니다.


모든 것이 명확합니다. 감사합니다.

나는 이것을 시도했지만 (즉, 상황에 따라 즉시 금지하고 허용) 다음과 같이 작동합니다.

이러한 마스터 초기화 후: int deinit().... // 슬레이브 슬레이브에 의한 작업 금지 는 순순히 침묵하지만 마스터는 이완( if (동일한 마술사 수 <=2) ) GlobalVariableSet (작업, 1 ); // 슬레이브 슬레이브에 대한 작업 허가 , 8개의 다른 쌍에 8개가 있으며 마스터 조건에 지정된 대로 2개 쌍으로 열리지 않고 4-6개 쌍으로 열 수 있습니다. 즉, 마스터가 "알아낼 때까지 열립니다. "그 "동일한 마법의 수"는 이미 2보다 훨씬 많습니다. 그 후, 물론 나머지 노예는 침묵하지만 공개적으로 더 이상 원하는대로 2가 아니라 4-6입니다.

내가 이해하는 바와 같이 이것은 내 int start() 코드를 실행한 후 제어가 int start() 슬레이브 어드바이저로 이전되고 얼마나 많은 int start() 슬레이브 어드바이저 가 실행할 시간이 있고 얼마나 많은 복사본에 따라 달라지기 때문에 발생합니다. 마스터가 시작되고 전역이 금지되지 않을 때까지 얼마나 많은 쌍이 열릴 것인지. 단말기의 알고리즘과 문제의 본질을 잘못 이해했다면 정정해 주십시오. 대략적으로 말하자면, 하나의 마스터와 하나의 슬레이브가 있으면 모든 것이 올바르게 작동하지만 8-10개의 슬레이브가 있습니다!

어떤 이유에서인지 마스터의 시작을 반복해서 영원한 실행으로 몰아가려고 했지만 내 터미널이 그냥 멈췄다고 썼습니다.

artmedia70 : " 당신의 매니저가 매니저라면 왜 일종의 대기열을 기다리고 있습니까?" - 그것이 내가 알고 싶은 것입니다.

 

그리고 왜 그리고 왜 두 개의 동일한 마법이 만들어졌습니까?

전역 변수 를 통해 포함된 Expert Advisors에 대해 겹치지 않는 마법 영역 할당을 구성할 수 있습니다. 적절한 검사와 할당은 init()에서 이루어집니다.

또한, 마스터가 제어해야 하는 현재 일반 상황에 따라 명시적으로 지정하거나 마스터로 지정하여 각 악기에 대해 열린 주문 수를 제한할 수 있습니다.

저것들. 노예가 어떤 행동을 취했다면, 그는 이에 대해 주인에게 보고해야 합니다. 주인은 차례로 노예의 추가 행동(또는 그의 무활동)이 의존하는 이력서를 발행해야 합니다.