다중 통화 고문에 대한 질문 - 페이지 2

 

alexjou, 도움말을 보고 다음을 찾았습니다.

"extern 메모리 클래스는 외부 변수를 정의합니다. extern 수정자는 데이터 유형보다 먼저 지정됩니다. 외부 변수 는 프로그램 입력 매개변수를 정의하며 프로그램 속성 창에서 사용할 수 있습니다. 배열은 외부 변수로 작동할 수 없습니다."

다음은 사용자 지정 표시기의 전체 코드입니다.

 #property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_minimum 0
#property indicator_maximum 100
//---- input parameters
//extern string    st="---Параметры Stochastic---";
extern int       KPeriod = 12 ;
extern int       DPeriod = 3 ;
extern int       Slowing = 2 ;
//extern string    en="---Параметры Envelopes---";
extern int       EnvPeriod = 17 ;
extern int       Deviation = 15 ;
extern int       Shift = 1 ;
//---- buffers
double Stochastic [] ;
double UP [] ;
double LOW [] ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init ()
  {
//---- indicators
   SetIndexStyle ( 0 , DRAW_LINE ) ;
   SetIndexBuffer ( 0 , Stochastic ) ;
   SetIndexStyle ( 1 , DRAW_LINE ) ;
   SetIndexBuffer ( 1 , UP ) ;
   SetIndexStyle ( 2 , DRAW_LINE ) ;
   SetIndexBuffer ( 2 , LOW ) ;
//----
   return ( 0 ) ;
  }
int deinit ()
  {
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start ()
  {
     int limit ;
     int counted_bars = IndicatorCounted () ;
  //---- последний посчитанный бар будет пересчитан
     if ( counted_bars > 0 ) counted_bars --;
     limit = Bars - counted_bars ;
  //---- основной цикл
     for ( int i = 0 ; i < limit ; i ++ )
 
{
Stochastic [ i ] = iStochastic ( NULL , 0 , KPeriod , DPeriod , Slowing , MODE_SMA , 0 , MODE_MAIN , i ) ;
}
     for ( i = 0 ; i < limit ; i ++ )
{
UP [ i ] = iMAOnArray ( Stochastic , 0 , EnvPeriod , Shift , MODE_SMA , i ) + Deviation ;
LOW [ i ] = iMAOnArray ( Stochastic , 0 , EnvPeriod , Shift , MODE_SMA , i ) - Deviation ;
)
 
  return ( 0 ) ;
  }

품질에 어드바이저의 외부 변수를 설정합니다.

 extern int     K__period        = 6 ;
extern int     Env_period      = 10 ; 
extern double  Env_deviation    = 12 ;
 
//---------------------------------------------
int start ()
  {
 
... ...
double Env_low [ 2 ] ;
//
double Stochastic [ 2 ] ;
 
Env_low [ 0 ]    = iCustom ( " USDJPY " , 0 , " i-StochEnv " , K__period , 3 , 3 , Env_period , Env_deviation , 1 , 2 , 0 ) ;
Stochastic [ 0 ] = iCustom ( " USDJPY " , 0 , " i-StochEnv " , K__period , 3 , 3 , Env_period , Env_deviation , 1 , 0 , 0 ) ;
Stochastic [ 1 ] = iCustom ( " USDJPY " , 0 , " i-StochEnv " , K__period , 3 , 3 , Env_period , Env_deviation , 1 , 0 , 1 ) ;
이 쌍은 테스터에서 작동합니다. 여기서 무엇이 잘못될 수 있습니까?

 
정말 감사합니다. 거절하지 않겠습니다. :-) 그리고 ICQ에 비누를 쓰겠습니다. 번호를 표시하십시오.
그리고 답변에 관해서는 이렇게 말씀드리겠습니다. 제가 먼저 답변을 드렸고 다른 분들이 오셔서 답변을 보고 아무 것도 추가하지 않으셨습니다. 그러므로 여기 있는 모든 사람이 너무 사악하고 지식을 공유하고 싶지 않다고 생각하지 마십시오.
 
Эксперт: iCustom("USDJPY", ...


А индикатор откуда об этом знает? Лучше добавить в секцию extern индикатора строковую переменную вроде


extern string SymbolName = "USDJPY"; // инструмент по умолчанию 

и вызывать стохастик так 

Stochastic[i]=iStochastic(SymbolName, 0, ...

(Опять какие-то глюки форума. В Лисе стрелки не работают, оттго и пишу не по-людски) 
 
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Red
#property indicator_color3 Red
#property indicator_minimum 0
#property indicator_maximum 100
//---- input parameters
//extern string    st="---Параметры Stochastic---";
extern string    SymbolName = "USDJPY"; 
extern int       TimeFrame = 0; 
extern int       KPeriod =12;
extern int       DPeriod =3;
extern int       Slowing =2;
//extern string    en="---Параметры Envelopes---";
extern int       EnvPeriod=17;
extern int       Deviation=15;
extern int       Shift=1;
//---- buffers
double Stochastic[];
double UP[];
double LOW[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Stochastic);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,UP);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,LOW);
//----
   return(0);
  }
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int limit;
     int counted_bars=IndicatorCounted();
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
  //---- основной цикл
     for(int i=limit-1; i>=0; i--) // индикаторы лучше рассчитывать слева направо
 
{
Stochastic[i]=iStochastic(SymbolName,TimeFrame,KPeriod,DPeriod,Slowing,MODE_SMA,0,MODE_MAIN,i);
}
     for(i=limit-1; i>=0; i--) // см. примечание
{
UP[i] =iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)+Deviation;
LOW[i]=iMAOnArray(Stochastic,0, EnvPeriod, Shift,MODE_SMA,i)-Deviation;
)
 
  return(0);
  }


Вызов из эксперта:

iCustom("USDJPY", 0, ...

С iMAOnArray вообще надо обращаться аккуратно. Например, поэкспериментировать с порядком ее расчета. 
А лучше всего такие вещи делать самому. Кстати, для мультивалютного эксперта может потребоваться везде 
явно задавать имя символа и рабочий тайм-фрейм, чтобы избежать умолчательных сюрпризов вроде этого.
 

알렉스주!

내가 제대로 이해한거야????????

다중 통화 Expert Advisor에서 사용자를 호출할 때. 특정 쌍에 대한 iCustom 표시기는 사용자 자체에서 먼저 더 좋아야 합니다. 제공하는 지표 -

외부 문자열 SymbolName = "USDJPY"; // 기본 도구

이것은 고문에서 다음을 설정한다는 사실에 추가됩니다.

iCustom("USDJPY", 60, ... 이 쌍에 대해!

그러나 다른 내선과 함께 다른 쌍에 대해 이 사용자 지정 표시기를 호출하면. 매개변수 - 이 다른 쌍에 대해 이 사용자의 사본을 입력해야 함을 의미합니다. 다른 이름을 가진 칠면조, 그리고 또 다른 쌍의 상징을 설정했습니다!

하지만 커스텀 칠면조 없이 혼자서 EA 내부에서 iMAOnArray를 계산하는 것이 정말 쉽습니다!

 
바르게. 이것은 일반적으로 아마추어 일이지만. 예를 들어, 내 관행은 특정 아이디어를 테스트하기 위해서만 사용자 지정 지표 를 사용하고 아이디어가 작동하는 것으로 판명되면 지표 코드를 Expert Advisor에게 전송하는 것입니다. 이 접근 방식은 감지하기 어렵고 조잡한 프로그래밍으로 생명을 크게 오염시킬 수 있는 "빈" 표시기 값과 같은 함정에 대해 실질적으로 보장합니다.
 

설명 감사합니다! 내가 돌볼게...

klerk, 주말에 ICQ에 문제가 있습니다.

여기 내 메일이 있습니다. 고문의 주소를 보낼 수 있습니다.

rid200549@ya.ru

 
alexjou :
(Опять какие-то глюки форума. В Лисе стрелки не работают, оттго и пишу не по-людски) 
어머니의 키보드 커넥터에 결함이 있었습니다. 포럼은 전혀 관련이 없습니다. 잘못된 알람에 대해 죄송합니다.
 

서기, 담당자 여기 또는 내 메시지의 우편 수신을 확인하십시오.

그리고 전문가를 위한 또 다른 질문(너무 어리석은 경우 죄송합니다):

다중 통화 Expert Advisor에서 -

 double bid_GBP = MarketInfo ( " GBPUSD " , MODE_BID ) ;
 double ask_GBP = MarketInfo ( " GBPUSD " , MODE_ASK ) ;
 double point_GBP = MarketInfo ( " GBPUSD " , MODE_POINT ) ;

그리고 각 쌍의 후행에서 이러한 값도 입력하고 바꿔야 합니까?

 .... ...
if ( OrderType () == OP_BUY )                                            {
       if ( ! Profit_Trailing || ( Bid - OrderOpenPrice ()) > Trailing_Stop * Point ) {
        if ( OrderStopLoss () < Bid - ( Trailing_Stop + Trailing_Step - 1 ) * Point )      {
.... ....
아니면 그대로 둘 수 있습니까?
 
rid :

그리고 각 쌍의 후행에서 이러한 값도 입력하고 바꿔야 합니까?

틀림없이.