Çoklu para birimi danışmanı hakkında soru - sayfa 2

 

alexjou, yardıma baktım ve şunu buldum:

"Harici bellek sınıfı bir harici değişken tanımlar. Harici değiştirici, veri türünden önce belirtilir. Harici değişkenler program giriş parametrelerini tanımlar, program özellikleri penceresinden kullanılabilirler. Diziler harici değişkenler olarak hareket edemez."

İşte özel göstergenin tüm kodu.

 #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 ) ;
  }

Kalitede Danışmanın dış değişkenlerini ayarladım

 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 ) ;
Bu çift test cihazında çalışır. Burada yanlış olan ne olabilir?

 
çok teşekkür ederim, reddetmeyeceğim. :-) Ve sana ICQ'da sabun yazacağım, numarayı belirt.
Ve cevaplara gelince, size şunu söyleyeceğim: Ben sadece önce cevap verdim, diğerleri geldi ve cevabı gördü ve hiçbir şey eklemedi. Bu nedenle, buradaki herkesin çok kötü olduğunu ve bilgi paylaşmak istemediğini düşünmeyin.
 
Эксперт: 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 вообще надо обращаться аккуратно. Например, поэкспериментировать с порядком ее расчета. 
А лучше всего такие вещи делать самому. Кстати, для мультивалютного эксперта может потребоваться везде 
явно задавать имя символа и рабочий тайм-фрейм, чтобы избежать умолчательных сюрпризов вроде этого.
 

alexjou!

Seni doğru anladım mı??????????

Bir kullanıcıyı ararken, çok para birimli bir Uzman Danışmanda. Belirli bir çift için iCustom göstergesinin önce kullanıcının kendisinde daha iyi olması gerekir. sağlamak için gösterge -

harici string SymbolName = "USDJPY"; // varsayılan araç

Bu, danışmanda ayarlanacaklara ek olarak:

iCustom("USDJPY", 60, ... bu çift için!

Ancak bu özel göstergeyi başka bir dahili numara ile başka bir çift için çağırırsam. parametreler - bu, diğer çift için bu kullanıcının bir kopyasını girmeniz gerektiği anlamına gelir. türkiye farklı bir isimle ve orada da başka bir çiftin sembolünü ayarla!

Ancak, özel hindiler olmadan EA içinde iMAOnArray'i kendiniz hesaplamak gerçekten daha kolay!

 
Doğru şekilde. Bu genellikle amatör bir şey olsa da. Örneğin benim uygulamam, yalnızca belirli bir fikri test etmek için özel göstergeler kullanmak ve ardından fikir işe yararsa gösterge kodunu bir Uzman Danışmana aktarmaktır. Bu yaklaşım, tespit edilmesi zor olan ve özensiz programlama ile hayatı büyük ölçüde zehirleyebilecek "boş" gösterge değerleri gibi tuzaklara karşı pratik olarak garanti verir.
 

Açıklama için teşekkürler! Ben halledeceğim...

Klerk, hafta sonları ICQ ile sorunlarım var.

İşte benim postam - danışmanın adresini ona gönderebilirsiniz.

rid200549@ya.ru

 
alexjou :
(Опять какие-то глюки форума. В Лисе стрелки не работают, оттго и пишу не по-людски) 
Annemin klavye konektöründe arızalar vardı. Forumun kesinlikle alakası yok. Yanlış alarm için kusura bakmayın.
 

katip, bkz. burada veya mesajımın posta makbuzunda onaylayın.

Ve uzmanlar için başka bir soru (çok aptalcaysa özür dilerim):

çok para biriminde Uzman Danışman -

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

Ve her çift için takiplerde, bu değerleri de girip değiştirmeniz gerekiyor mu?

 .... ...
if ( OrderType () == OP_BUY )                                            {
       if ( ! Profit_Trailing || ( Bid - OrderOpenPrice ()) > Trailing_Stop * Point ) {
        if ( OrderStopLoss () < Bid - ( Trailing_Stop + Trailing_Step - 1 ) * Point )      {
.... ....
Yoksa olduğu gibi bırakabilir misin?
 
rid :

Ve her çift için takiplerde, bu değerleri de girip değiştirmeniz gerekiyor mu?

Kesinlikle.