여러 쌍에 대해 EA를 실행하는 방법은 무엇입니까? - 페이지 3

 

Jacques, 이 스레드에 대한 지속적인 관심에 감사드립니다. 나는 여전히 첫 번째 통화에 대해 EA를 디버깅하고 있지만 적합하다고 판단되면 여러 통화에 사용할 계획입니다. 그 전제에서 나는 그 개념을 구현하는 방법에 대한 전략을 숙고했습니다. 따라서이 스레드에 대한 나의 관심.


귀하의 요청에 따라 3쌍의 그래프를 추가로 준비했는데, 그 과정에서 2쌍의 24시간 동안 32,000틱 이상(엑셀의 그래프 데이터 제한)이 있다는 것을 발견했습니다. 결과적으로 그래프를 두 기간(첫 번째 12시간 및 두 번째 12시간)으로 나누어야 했습니다. 비교적 일관성을 유지하기 위해 세 쌍을 모두 12시간 단위로 나누었습니다.


한 가지 명심해야 할 점은 이 그래프의 세로 눈금은 수평선 사이에 비례하지만 가로 눈금은 시간에 비례하지 않는다는 것입니다(즉, 눈금의 1/12이 1시간을 나타낸다고 가정할 수 없음)


이 그래프에서 중요한 점은 모든 쌍이 24시간 동안 틱 사이에 상당한 간격이 있는 기간이 있다는 것입니다. 결과적으로 여러 쌍을 하나의 EA로 결합하는 경우 "While" 루프를 사용하는 것이 현명하다고 생각합니다. "복잡한 프로그램의 일반 특성"이라는 제목의 https://book.mql4.com/special/index 에 대한 StraightTrader의 참조에는 이 기술과 이 기사의 시작 섹션에 있는 그래프에 대한 좋은 논의가 있습니다.


24시간 동안 GBPJPY 44,834틱

24시간 동안 EURJPY 37,140틱

24시간 동안 GBPUSD 29,313틱

24시간 동안 EURUSD 22,627틱













건배!

 
FXtrader2008 :

결과적으로 여러 쌍을 하나의 EA로 결합하는 경우 "While" 루프를 사용하는 것이 현명하다고 생각합니다. "복잡한 프로그램의 일반 특성"이라는 제목의 https://book.mql4.com/special/index 에 대한 StraightTrader의 참조에는 이 기술과 이 기사의 시작 섹션에 있는 그래프에 대한 좋은 논의가 있습니다.

바로 그 경우입니다. 하나의 EA에 있는 여러 쌍 -> 들어오는 틱으로 기능 활성화를 시작하는 대신 while 루프 접근 방식을 사용합니다.


하나의 EA에 대해 하나의 통화 쌍에 반대하고 싶습니다.

나의 장기적 접근 방식은 ONE MULTICURRENCY MULTISTRATEGY EA입니다. 나는 얼마 전에 이러한 아이디어 중 일부를 구현하는 Universal Expert Advisor 계획 준비했습니다.

나중에 이 코드를 개발하고 Universaltrader 라는 Google 코드 프로젝트를 시작한 내 게시물에 포함되지 않았습니다. 이 프로젝트는 당신의 기대를 충족시킬 수 있습니다. 구현되지 않은 유일한 것은 While 주기 접근 방식(구현하기 쉽습니다)입니다.


MULTICURRENCY MULTISTRATEGY EA의 장점:

  • 모든 전략을 함께
  • 모든 전략을 함께 또는 독립적으로 조정/설정 가능
  • 다양한 전략/통화 쌍을 켜고 끌 수 있음
  • 나는 더 많은 adv를 확신합니다. 거기 있어요

단점:

  • 한 번에 하나의 통화 쌍만 백테스트할 수 있음 - 다른 쌍이 꺼진 상태에서 몇 개의 통화 쌍을 거래하고 있는지 백테스트를 여러 번 실행해야 합니다.
  • 성능 문제 - 백테스트에서만 성능 문제를 발견했지만 실제 거래에서도 관련이 있다고 확신합니다. 구현된 전략의 복잡성과 수에 따라 다릅니다.

이 프로젝트는 여전히 개선되어야 하므로 관심이 있는 사람이 있으면 이 Google 코드 프로젝트에 초대할 수 있습니다.


여기에 첨부된 현재 스크립트:

 
FXtrader2008 wrote >>

Jacques, 이 스레드에 대한 지속적인 관심에 감사드립니다. 나는 여전히 첫 번째 통화에 대해 EA를 디버깅하고 있지만 적합하다고 판단되면 여러 통화에 사용할 계획입니다. 그 전제에서 나는 그 개념을 구현하는 방법에 대한 전략을 숙고했습니다. 따라서이 스레드에 대한 나의 관심.

귀하의 요청에 따라 3쌍의 그래프를 추가로 준비했는데, 그 과정에서 2쌍의 24시간 동안 32,000틱 이상(엑셀의 그래프 데이터 제한)이 있다는 것을 발견했습니다. 결과적으로 그래프를 두 기간(첫 번째 12시간 및 두 번째 12시간)으로 나누어야 했습니다. 비교적 일관성을 유지하기 위해 세 쌍을 모두 12시간 단위로 나누었습니다.

한 가지 명심해야 할 점은 이 그래프의 세로 눈금은 수평선 사이에 비례하지만 가로 눈금은 시간에 비례하지 않는다는 것입니다(즉, 눈금의 1/12이 1시간을 나타낸다고 가정할 수 없음)

이 그래프에서 중요한 점은 모든 쌍이 24시간 동안 틱 사이에 상당한 간격이 있는 기간이 있다는 것입니다. 결과적으로 여러 쌍을 하나의 EA로 결합하는 경우 "While" 루프를 사용하는 것이 현명하다고 생각합니다. "복잡한 프로그램의 일반 특성"이라는 제목의 https://book.mql4.com/special/index 에 대한 StraightTrader의 참조에는 이 기술과 이 기사의 시작 섹션에 있는 그래프에 대한 좋은 논의가 있습니다.

24시간 동안 GBPJPY 44,834틱

24시간 동안 EURJPY 37,140틱

24시간 동안 GBPUSD 29,313틱

24시간 동안 EURUSD 22,627틱

건배!

귀하의 차트에 감사드립니다.

틱 실행 활성화 대신 루프를 선택할 수 있습니다. 미세한 정밀도가 필요한 사람들에게는 더 과학적일 것이며 구현하는 데 큰 문제가 되지 않습니다. 또 다른 장점은 EA를 원하는 통화 쌍에 연결할 수 있다는 것입니다(차트에 개체를 그릴 때 유용함).

건배

 
cloudbreaker wrote >>

그리고 MarketInfo() 함수를 사용하여 현재 차트 외부의 기호에 대한 가장 최근의 매도호가 및 매수호가를 검색할 수 있습니다.

따라서 다음과 같은 옵션이 있습니다.

- 많은 차트에 동일한 EA를 첨부하고 각 차트의 기본 기호에 대해 작동(Ask 및 Bid 내장 변수 사용)

- 선택한 모든 기호에 대해 실행되는 특정 차트에 EA를 첨부합니다(비기본 기호에 대해 MarketInfo() 함수 사용) - 기본 기호 틱을 트리거 장치로 사용하기만 하면 됩니다.

- 마스터 및 슬레이브 EA가 서로 다른 차트에 연결되어 하나가 다른 차트에 의해 트리거됩니다(예: 하나는 파일에 값을 쓰고 다른 하나는 이 데이터를 찾은 다음 거래할 때까지 파일을 지속적으로 읽습니다)

지금 저는 이러한 전략 중 가장 간단한 방법을 사용하고 있습니다. 4개 통화의 3개 기간에 대한 EA가 있으므로 모두 12개입니다. 그것들은 모두 타임프레임의 첫 번째 틱에 실행되도록 설정되어 있습니다. 그러나 MT4가 항상 모든 EA를 실행하는 것은 아니라는 문제가 있습니다. 무슨 일이 일어나고 있는지 보기 위해 start 함수 바로 뒤에 print 문을 넣었습니다. 예를 들어 H1의 4개 EA 중 3개에만 도달했지만 다른 쌍이 다른 시간에 누락되었으며 EA는 설정을 제외하고 동일했습니다. 각 쌍에 대한 최적화에서.

질문 - 여러 EA가 동시에 실행되도록 설정된 경우 MT4 in은 한 번에 하나의 EA만 실행합니까? 한 EA의 실행이 다른 EA의 실행에 어떤 식으로든 종속되어 있습니까(바쁜 거래 컨텍스트 제외), 아니면 완전히 독립적입니까?

그렇다면 두 번째 옵션을 사용할 수 있습니다. 저는 EA를 가능한 한 단순하게 유지하려고 노력하고 있습니다. 적어도 저에게는 더 복잡하게 작성할수록 더 많은 실수를 하기 때문입니다.

 
joetrader :

지금 저는 이러한 전략 중 가장 간단한 방법을 사용하고 있습니다. 4개 통화의 3개 기간에 대한 EA가 있으므로 모두 12개입니다. 그것들은 모두 타임프레임의 첫 번째 틱에 실행되도록 설정되어 있습니다. 그러나 MT4가 항상 모든 EA를 실행하는 것은 아니라는 문제가 있습니다. 무슨 일이 일어나고 있는지 보기 위해 start 함수 바로 뒤에 print 문을 넣었습니다. 예를 들어 H1의 4개 EA 중 3개에만 도달했지만 다른 쌍이 다른 시간에 누락되었으며 EA는 설정을 제외하고 동일했습니다. 각 쌍에 대한 최적화에서.

질문 - 여러 EA가 동시에 실행되도록 설정된 경우 MT4 in은 한 번에 하나의 EA만 실행합니까? 한 EA의 실행이 다른 EA의 실행에 어떤 식으로든 종속되어 있습니까(바쁜 거래 컨텍스트 제외), 아니면 완전히 독립적입니까?

그렇다면 두 번째 옵션을 사용할 수 있습니다. 저는 EA를 가능한 한 단순하게 유지하려고 노력하고 있습니다. 적어도 저에게는 더 복잡하게 작성할수록 더 많은 실수를 하기 때문입니다.

나는 그런 문제 없이 차트에서 여러 EA를 실행하고 있습니다. 그들이 동시에 실행한다고 말할 수 있는 한, 그들이 서로를 알아차릴 때만 무역 컨텍스트가 그들 중 하나에 의해 사용될 때입니다. EA 자체에 관해서는 완전히 독립적입니다. 각각은 고유한 변수 복사본을 가지고 있습니다. 간단히 말하겠습니다. 12개의 차트에 첨부된 12개의 EA를 실행하고 있습니까? 아마도 당신은 기억 문제가 있습니까?

 
gordon wrote >>

나는 그런 문제 없이 차트에서 여러 EA를 실행하고 있습니다. 그들이 동시에 실행한다고 말할 수 있는 한, 그들이 서로를 알아차릴 때만 무역 컨텍스트가 그들 중 하나에 의해 사용될 때입니다. EA 자체에 관해서는 완전히 독립적입니다. 각각은 고유한 변수 복사본을 가지고 있습니다. 간단히 말하겠습니다. 12개의 차트에 첨부된 12개의 EA를 실행하고 있습니까? 아마도 당신은 기억 문제가 있습니까?

권리. 12개의 차트에 12개의 EA가 있습니다. 6GB 메모리가 있는 아주 새 컴퓨터이므로 메모리가 될 것이라고는 생각 하지 않지만 고려해 볼 가치가 있으며 배제하지 않겠습니다. 하지만 당신은 내 질문에 대답했습니다. EA가 동시에 실행될 수 있어야 한다면 내가 뭔가 잘못하고 있는 것일 수 있습니다. 처음이 아닙니다! 코드를 확인하고 좀 더 공부하겠습니다. 당신의 도움을 주셔서 감사합니다.

 
MT4 클라이언트의 별도 인스턴스에서 차트를 실행하고 있습니까? 한 인스턴스에서 모든 차트를 여는 경우 차트는 단일 거래 컨텍스트를 공유하게 되며 해당 컨텍스트를 공유하기 위해 로직을 코딩해야 합니다. EA의 동작이 둘 이상의 거래 작업 을 수행할 가능성이 있음을 의미하는 경우 동시에. CB
 
cloudbreaker wrote >>
MT4 클라이언트의 별도 인스턴스에서 차트를 실행하고 있습니까? 한 인스턴스에서 모든 차트를 여는 경우 차트는 단일 거래 컨텍스트를 공유하게 되며 해당 컨텍스트를 공유하기 위해 로직을 코딩해야 합니다. EA의 동작이 둘 이상의 거래 작업을 수행할 가능성이 있음을 의미하는 경우 동시에. CB

예 - 동일한 MT4 클라이언트에서 실행하고 있습니다. 그러나 나는 이 기사 https://www.mql5.com/en/articles/1412trade context busy 솔루션 중 하나를 사용하고 있으며 trade context busy 오류가 발생하지 않습니다.

포지션 개설을 시도하는 지점까지 도달하지 않는 것 같습니다. 일부 사람들에게는 EA를 전혀 시작하지 않는 것 같습니다. 내 시작 기능의 시작 부분에 인쇄 문을 넣었기 때문에 그렇게 말하는 것입니다.

내 시작 기능은 다음과 같습니다.

무효 시작()
{
//---- 새 막대의 첫 번째 틱에 대해서만 거래를 시작합니다.
if(볼륨[0]>1) 반환;
Print("체크 체크");

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
그렇지 않으면 CheckForClose();
}

나는 CADJPY,EURCHF,GBPUSD 및 USDJPY에서 거래하고 있습니다.

그리고 나는 이것을 얻는다:

2010.01.22 8:59:45 [EAName]USDJPY,H1: 틱체크

2010.01.22 8:59:45 [EAName]CADJPY,H1: 체크 체크

2010.01.22 8:59:45 [EAName]GBPUSD,H1: 틱체크

2010.01.22 9:59:45 [EAName]EURCHF,H1: 체크 체크

2010.01.22 9:59:46 [EAName]GBPUSD,H1: 틱체크

2010.01.22 9:59:46 [EAName]CADJPY,H1: 체크 체크

어떤 시간은 4개 모두가 거래되고 일부는 3개만 거래됩니다. H4가 거래하는 시간이 1시간이면 그 중 3명이 거래할 수 있지만 일반적으로 H1의 3-4개와 함께 4개 모두가 거래되는 것은 아닙니다.

모든 것이 거래되는지 확인하기 위해 볼륨을 3 또는 4틱으로 늘리는 해결 방법을 만들었습니다. 하지만 근본적인 문제를 해결할 수 있도록 MetaTrader를 더 잘 이해하려고 노력하고 있습니다.

내 질문은 - 내 EA에는 실행할 틱이 하나만 있기 때문에 각 EA를 동시에 실행합니까? 그래서 아마도 모두 실행되지 않는 것입니까? 내 EA에 정지 손실을 찾기 위해 과거 프랙탈의 최대 1500개를 비교하는 루프가 있으므로 시간이 걸릴 수 있습니다.

다시 말하지만, 어딘가에 내 코드에 문제가 있을 수 있습니다.

 
나는 당신이 당신의 코드에 문제가 있다고 생각하고 이것은 여러 EA의 주제와 아무 관련이 없습니다. 무엇이 작동하지 않는지 보려면 표준 Print()/Alert() 메서드를 사용하여 시작하지 않는 문제를 정확히 찾아내야 합니다.
 
tigersoft :
다음은 하나의 차트에서 EURUSD 및 USDCHF를 여는 간단한 코드입니다. ea조차도 다른 차트에 추가되어 EURUSD 및 USDCHF가 열립니다.

 //+------------------------------------------------------------------+
//|                                                          jkh.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool wannaBuy = true ;
bool wannaBuy1 = true ;
extern double LotSize = 0.01 ;
extern string symbol1 = "EURUSD" ;
extern string symbol2 = "USDCHF" ;
extern int MaxDifference = 6 ;
extern int Slippage = 3 ;
extern int Magicnumber1 = 786 ;
extern int Magicnumber2 = 123 ;
int sendticket = 3 ;
string pairs[ 18 ];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
pairs[ 0 ] = symbol1;
pairs[ 1 ] = symbol2;
wannaBuy = true ;
wannaBuy1 = true ;

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   // Send order for EURUSD & USDCHF
   if (wannaBuy) {   
   int ticket1;
   RefreshRates();
   ticket1 = OrderSend(symbol1, OP_BUY, LotSize, MarketInfo(symbol1,MODE_ASK), Slippage, 0 , 0 , 0 , 0 ,Magicnumber1, 0 ) & OrderSend(symbol2, OP_BUY, LotSize, MarketInfo(symbol2,MODE_ASK), Slippage, 0 , 0 , 0 , 0 ,Magicnumber2, 0 );
   if (ticket1 < 0 )
   {
   Print ( "OrderSend failed with error #" , GetLastError());
   return ( 0 );
   }
   wannaBuy = false ;
   }

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

작동하지 않습니까?

백 테스트를 위해
주문 보내기 오류 4106을 받았습니다.

주문 보내기 기능 에 대한 USDCHF의 알 수 없는 기호 이름

Ordersend는 EURUSD 차트 또는 설정을 위해 기호 EURUSD를 선택하면 EURUSD에 대해 작동합니다.

다른 차트로 변경하면 EURUSD와 USDCHF 모두에 대해 알 수 없는 기호가 표시됩니다.

감사해요! 미리