다중 통화 고문에 대한 질문

 

좋은 저녁이에요!

나는 두 쌍을 하나의 고문으로 결합하기로 결정했습니다. 이 작업을 수행했습니다.

그러나 갑자기 그는 의심이 들었다. 그리고 이렇게 했습니다:

 extern bool    GBP = true ;
extern bool    EUR = true ;
- - - - - - - - - - - - - - - - - - - -
int start ()
  {
double A = iRSI ( " GBPUSD " , 0 , ..... ) ;
double B = iRSI ( " GBPUSD " , 0 , ..... ) ;
 
double C = iRSI ( " EURUSD " , 0 , ..... ) ;
double D = iRSI ( " EURUSD " , 0 , ..... ) ;
//------------------------------------------------------
if ( GBP ) { //если есть разрешение true
if ( A < B )
{
double   BID = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double   ASK = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double POINT = MarketInfo ( " GBPUSD " , MODE_POINT ) ;
( ticket = OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if ( EUR ) { //если есть разрешение true
if ( C > D )
{
double   BID = MarketInfo ( " EURUSD " , MODE____BID ) ;
 double   ASK = MarketInfo ( " EURUSD " , MODE____ASK ) ;
 double POINT = MarketInfo ( " EURUSD " , MODE____POINT ) ;
( ticket = OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return ( 0 ) ;  
  }

모든 것이 온라인과 테스터에서 작동합니다! 제대로 안된거 아닐까요? 다음과 같이 해야 합니다.

 extern bool    GBP = true ;
extern bool    EUR = true ;
- - - - - - - - - - - - - - - - - - - -
int start ()
  {
//------------------------------------------------------
if ( GBP ) //если есть разрешение true{
 
double C = iRSI ( " GBPUSD " , 0 , ..... ) ;
double D = iRSI ( " GBPUSD " , 0 , ..... ) ; 
 if ( A < B )
{
double   BID = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double   ASK = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double POINT = MarketInfo ( " GBPUSD " , MODE_POINT ) ;
( ticket = OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if ( EUR ) { //если есть разрешение true
 
double C = iRSI ( " EURUSD " , 0 , ..... ) ;
double D = iRSI ( " EURUSD " , 0 , ..... ) ;
 if ( C > D )
{
double   BID = MarketInfo ( " EURUSD " , MODE____BID ) ;
 double   ASK = MarketInfo ( " EURUSD " , MODE____ASK ) ;
 double POINT = MarketInfo ( " EURUSD " , MODE____POINT ) ;
( ticket = OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return ( 0 ) ;  
  }
두 번째 옵션도 테스터에서 작동하는 것 같습니다.

그러나 가장 좋은 방법은 무엇입니까?

 
rid :

좋은 저녁이에요!


나는 두 쌍을 하나의 고문으로 결합하기로 결정했습니다. 이 작업을 수행했습니다.


그러나 갑자기 그는 의심이 들었다. 그리고 이렇게 했습니다:

 extern bool    GBP = true ;
extern bool    EUR = true ;
- - - - - - - - - - - - - - - - - - - -
int start ()
  {
double A = iRSI ( " GBPUSD " , 0 , ..... ) ;
double B = iRSI ( " GBPUSD " , 0 , ..... ) ;
 
double C = iRSI ( " EURUSD " , 0 , ..... ) ;
double D = iRSI ( " EURUSD " , 0 , ..... ) ;
//------------------------------------------------------
if ( GBP ) { //если есть разрешение true
if ( A < B )
{
double   BID = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double   ASK = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double POINT = MarketInfo ( " GBPUSD " , MODE_POINT ) ;
( ticket = OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if ( EUR ) { //если есть разрешение true
if ( C > D )
{
double   BID = MarketInfo ( " EURUSD " , MODE____BID ) ;
 double   ASK = MarketInfo ( " EURUSD " , MODE____ASK ) ;
 double POINT = MarketInfo ( " EURUSD " , MODE____POINT ) ;
( ticket = OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return ( 0 ) ;  
  }

모든 것이 온라인과 테스터에서 작동합니다! 제대로 안된거 아닐까요? 다음과 같이 해야 합니다.

 extern bool    GBP = true ;
extern bool    EUR = true ;
- - - - - - - - - - - - - - - - - - - -
int start ()
  {
//------------------------------------------------------
if ( GBP ) //если есть разрешение true{
 
double C = iRSI ( " GBPUSD " , 0 , ..... ) ;
double D = iRSI ( " GBPUSD " , 0 , ..... ) ; 
 if ( A < B )
{
double   BID = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double   ASK = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double POINT = MarketInfo ( " GBPUSD " , MODE_POINT ) ;
( ticket = OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)     }}}
//----------------------------------------------------------  
if ( EUR ) { //если есть разрешение true
 
double C = iRSI ( " EURUSD " , 0 , ..... ) ;
double D = iRSI ( " EURUSD " , 0 , ..... ) ;
 if ( C > D )
{
double   BID = MarketInfo ( " EURUSD " , MODE____BID ) ;
 double   ASK = MarketInfo ( " EURUSD " , MODE____ASK ) ;
 double POINT = MarketInfo ( " EURUSD " , MODE____POINT ) ;
( ticket = OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...)      }}}
//------------------------------------------------------------
return ( 0 ) ;  
  }
두 번째 옵션도 테스터에서 작동하는 것 같습니다.

그러나 가장 좋은 방법은 무엇입니까?




나는 일반적으로 처음에 모든 지표 값을 계산합니다. 즉, 옵션 1이 더 쉽고 혼동되지 않으며 코드가 더 구조화됩니다.
 

고맙습니다! 대답을 위해. 그리고 또 다른 질문. 후행 정지는 전혀 작동하고 싶지 않습니다. 그들은 테스터에서 별도로 작동합니다!

그리고 온라인에서는 한 쌍이 작동합니다. 그러나 다른 사람에 따르면 고문이 켜지면 즉시 오류를 인쇄합니다.

그러나 거래는 진행 중입니다. 두 번째 쌍에 뒤지지 않고 있습니다.

SL 수정 중 오류 130

 int start ()
  {
РАСЧЁТ  ИНДИКАТОРОВ 
{
ПОКУПКА/ПРОДАЖА
  }
 
for ( int j = 0 ; j < OrdersTotal () ; j ++ )                                    {
    if ( OrderSelect ( j , SELECT_BY_POS , MODE_TRADES ))                     {
     if ( OrderSymbol () == " GBPUSD " && OrderMagicNumber () == Magic1 )          {
ИДЕТ КОД 1 ТРЕЙЛИНГА.
   }
 
for ( int r = 0 ; r < OrdersTotal () ; r ++ )                                    {
    if ( OrderSelect ( r , SELECT_BY_POS , MODE_TRADES ))                     {
     if ( OrderSymbol () == " EURUSD " && OrderMagicNumber () == Magic2 )          {
ИДЕТ КОД 2 ТРЕЙЛИНГА
}
 
return ( 0 ) ;  
  }
후행 코드는 동일하지만 외부 및 내부 코드입니다. 변수는 다른 기호로 지정됩니다.

무엇이 잘못되었는지 알 수 없습니다. 누가 말할 수 있습니까?

 
이렇게 시도
 int start ()
{
//РАСЧЁТ  ИНДИКАТОРОВ 
 
//ПОКУПКА/ПРОДАЖА
  
 
for ( int j = 0 ; j < OrdersTotal () ; j ++ )
  {
    if ( OrderSelect ( j , SELECT_BY_POS , MODE_TRADES ))
       {
          if ( OrderSymbol () == " GBPUSD " && OrderMagicNumber () == Magic1 )         
              {
                  ИДЕТ КОД 1 ТРЕЙЛИНГА.
              }
          if ( OrderSymbol () == " EURUSD " && OrderMagicNumber () == Magic2 )   
              {
                  ИДЕТ КОД 2 ТРЕЙЛИНГА
              }
        }
   }
 
 
  return ( 0 ) ;  
}
 
코드를 구조화하면 사용자와 사용자 모두 더 쉽게 이해할 수 있습니다.
 

노력하겠습니다. 감사합니다.

 

효과가 있었던 것 같습니다!

아직 오류가 출력되지 않습니다. 나는 트롤을 확인하기 위해 이익을 기다리고 있습니다.

더 많은 질문이 있습니다. 어렵지 않다면.

다중 통화 실험의 가장 단순한 예는 어디에도 없습니다. 그리고 거기에는 약한 마음이 없습니다. 모든 것이 쌓여 있습니다 - 이해하지 못합니다.

내 코드에는 다음이 있습니다.

 double   BID = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double   ASK = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double POINT = MarketInfo ( " GBPUSD " , MODE_POINT ) ;
//-------Проверяем условие на покупку-------------
if  (

그러나 이 사이트의 드문 예에서 유사한 블록이 있는 행이 있습니다.

 RefreshRates () ;
 double BID = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double ASK = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double POINT = MarketInfo ( " GBPUSD " , MODE_POINT ) ;

나는 또한이 줄을 붙여 넣었다. 컴파일됨. 하지만 내 작업에는 어떤 변화도 보이지 않습니다.

여기에 얼마나 필요한가? 아마도 내 Expert Advisor에 남겨야 합니까?. 모든 틱에서 작동합니다. 그리고 그것은 값의 배열을 사용합니다 -

 //------заполняем массив значениями RSI GBPUSD -----------
 double RSI_array [ 30 ] ;
int    i = 0 ;
while ( i < 31 )
 {
RSI_array [ i ] = iRSI ( " GBPUSD " , 0 , GBPUSD_period , 3 , 3 , MODE_SMA , 0 , MODE_MAIN , i ) ;
i ++;

 
다중 통화 Expert Advisor의 원칙은 대략 다음과 같습니다.
1. 지표를 계산할 때 특정 통화 및 시간 간격을 지정합니다. 예: iRSI ("GBPUSD", 60 ,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //그런데 여기에 오류가 있습니다.
2. MarketInfo를 사용하여 가격, 포인트 등을 얻습니다.
3. 예를 들어 Low[0] 대신 iLow(...)를 사용합니다.
적어도 모든 통화 쌍에 대해 작성하십시오.
행운을 빕니다.
 

오류가 발생했습니다! "0"대신 - 고문이 작동하는 통화 지표의 변수 - tf를 입력하십시오.

실패 없이 내 전문가처럼 작동합니다. 그리고 트롤이 작동합니다.

그리고 마지막으로 질문 하나. 하나 더 삽입했습니다. 세 번째 커플. 그러나 나는 내장이 아니라 사용자 정의 표시기를 호출했습니다. 이 쌍은 테스터에서 작동합니다. 그러나 온라인 - 그는 원하지 않습니다! 이해할 수 없는 것을 인쇄합니다. 거의 매초마다 이 칠면조가 삽입되고 제거됩니다. ..... - 무엇을 조언할 수 있습니까?

//************************************************ ** ***************

점원! 이번 주에 참석한 모든 전문가 중 당신만이 내 질문에 대답했습니다. 그리고 가장 만족스러운 답변을 받았습니다. ( RefreshRates ( ) 에 대한 질문 제외 )

여기에 이메일 주소를 입력하세요. 우편.

감사의 표시로 간단한 거래 "Grail" - Expert Advisor!, cat. 내 좋은 친구가 생각해 낸 것입니다.(동의). 나는 그와 함께 수동 확인 작업을 합니다. 내장 칠면조는 2개만 사용됩니다.

아이러니하지 않고 이것은 실제로 거의 "성배"(작업에 약간의 기술이 있음)입니다. - 당신은 몇 가지를 통해 확신할 것입니다. 받은 후 몇 분! 어쨌든, 모두 살펴봅시다:

기호 ------

기간 30분 (M30) 2007.01.02 11:00 - 2007.08.15 00:00

모든 틱 모델링(각 틱의 프랙탈 보간으로 사용 가능한 모든 가장 작은 기간을 기반으로 함)

시뮬레이션 품질 67.35%

초기 보증금 10000.00

당기순이익 4009.24

총 이익 6335.06 총 손실 -2325.82

수익성 2.72 승률 21.44

최대 드로다운 245.63(2.18%) 상대 드로다운 2.18%(245.63)

총 거래 187

숏포지션(%원) 71(80.28%)

롱포지션(%원) 116(68.10%)

수익성 있는 거래(전체의 %) 136(72.73%)

손실 거래(전체의 %) 51(27.27%)

가장 큰 수익을 내는 거래는 145.02이고 손실 거래는 -47입니다. 77

평균 이기는 거래 46.58, 손실 거래 -45.60

최대 연속 우승(이익) 9(586.96)

연속 손실(손실) 4(-189.99

그리고 이것은 대표자 외의 테스트 그래프입니다. 11월/12월 샘플 이전 2006년:

 
rid :

감사의 표시로 간단한 거래 " Grail "- 고문을 보내드립니다!, ...

축하합니다, 점원님, 당신은 공의 성배를 얻었습니다!
 
<<이해할 수 없는 것을 인쇄합니다. 거의 1초마다 이 칠면조가 놓여지고 제거됩니다.... - 조언해주실 수 있나요?>>

사용자 지정 표시기 가 호출되는 실제 매개변수는 목록의 extern 키(번호, 순서, 유형, ...)와 함께 나열된 형식 매개변수와 일치하지 않을 가능성이 높습니다. 꽤 흔한 실수.