FORTS Lütfen yardım edin - sayfa 6

 
Serj_Che :
OnInit'te olanı OnCalculate'de neden tekrarlıyorsunuz? Bu bir tür büyü mü?

Bu basit bir kopyala/yapıştır sihridir))

Tamam, popüler olarak açıklayacağım. Verilerin hazır olup olmadığının İnternet'te tek bir kontrolü yeterli değildir. Veriler asenkron olarak üretildiğinden (ana işlemi yavaşlatmamak için), o zaman İnternette kontrol sırasında bir veri hatası almak oldukça mümkündür (birçok faktöre bağlıdır).

Bu nedenle, kontrol yapılmalı ve (veya sadece) hesap makinesinde yapılmalı ve gerekli tüm veriler görünene kadar ana hesaplamalara başlamamalıdır - yani, her işarette hazır olana kadar kontrol edin.

 
Dima_S :

Bu basit bir kopyala/yapıştır büyüsüdür))

Tamam, popüler olarak açıklayacağım. Verilerin hazır olup olmadığının İnternet'te tek bir kontrolü yeterli değildir. Veriler asenkron olarak üretildiğinden (ana işlemi yavaşlatmamak için), o zaman İnternette kontrol sırasında bir veri hatası almak oldukça mümkündür (birçok faktöre bağlıdır).

Bu nedenle, kontrol yapılmalı ve ( veya sadece ) hesap makinesinde yapılmalı ve gerekli tüm veriler görünene kadar ana hesaplamalara başlamamalıdır - yani, her işarette hazır olana kadar kontrol edin.

Ne hakkında konuşuyoruz, göstergedeki OnInit işlevi bir pervane veya geliştiriciler hackliyor.

Kopyala / yapıştır harika bir şey, kendimi günah işliyorum))

 

Çukçi diye bağırdılar ama sorun çözülmedi!

 //+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1
//
bool is_failed = false ;
datetime start_time;
datetime end_time;
int mix_bars, rts_bars, si_bars;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
    start_time = StringToTime ( "2015.03.17" );
    end_time = TimeCurrent ();
//--- indicator buffers mapping
  mix_bars = GetBars( "MIX-6.15" , PERIOD_CURRENT , start_time, end_time ); 
   if ( mix_bars < 1 )
  {
    is_failed = true ;
     Print ( "Init failed. MIX-6.15 " );
  }
  rts_bars = GetBars( "RTS-6.15" , PERIOD_CURRENT , start_time, end_time ); 
   if ( rts_bars < 1 )
  {
    is_failed = true ;
     Print ( "Init failed. RTS-6.15 " );
  }
  si_bars = GetBars( "Si-6.15" , PERIOD_CURRENT , start_time, end_time ); 
   if ( si_bars < 1 )
  {
    is_failed = true ;
     Print ( "Init failed. Si-6.15 " );
  }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator Get bars function                               |
//+------------------------------------------------------------------+
int GetBars( string symbol, ENUM_TIMEFRAMES period, const datetime start_date, const datetime end_date )
{
   if ( ! SymbolInfoInteger ( symbol, SYMBOL_SELECT ) )
  {
     ResetLastError ();
//---    
     if ( GetLastError () != ERR_MARKET_UNKNOWN_SYMBOL )
    {
       SymbolSelect ( symbol, true );
    }
     else
    {
       Print ( "GetBars: Неизвестный символ - " , symbol );
       return ( 0 );
    }    
  }
//---  
   if ( MQL5InfoInteger ( MQL5_PROGRAM_TYPE ) == PROGRAM_INDICATOR && Period () == period && Symbol () == symbol )
  {
     Print ( "GetBars: Не пройдена проверка типа программы!" );
     return ( 0 );
  }  
//---
   if ( SymbolIsSynchronized ( symbol ) )
  {
     return ( Bars ( symbol, period, start_date, end_date ) );
  }
   else
  {
     long first_date = 0 ;
     datetime times[ 1 ];
//---    
     if ( SeriesInfoInteger ( symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE , first_date ) )
    {
       if ( first_date > 0 )
      {
//--- force timeseries build
         CopyTime ( symbol, period, datetime ( first_date ) + PeriodSeconds ( period ), 1 , times );
//--- check date
         if ( SeriesInfoInteger ( symbol, period, SERIES_FIRSTDATE , first_date ) )
//---        
         if ( first_date > 0 && first_date <= long ( start_date ) )
        {
           return ( Bars ( symbol, period, start_date, end_date ) );
        } 
      }
    }
     Print ( "Необходима загрузка истории с сервера!" );
  }       
//---  
   return ( 0 );
}  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   if ( is_failed )
   {
     Print ( "Sorry! Get Bars failed." );
   }
   else Print ( "Bingo! We done." );
//--- return value of prev_calculated for next call
   return (rates_total);
  }

İndirme geçmişini henüz yazmadım, AMA veriler terminalde ve ilk seferinde ondan ALMIYORLAR!

 2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Необходима загрузка истории с сервера!
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Init failed. RTS- 6.15 
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Необходима загрузка истории с сервера!
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Init failed. Si- 6.15 
2015.03 . 26 20 : 49 : 01.641 Test (MIX- 6.15 ,M1)      Sorry! Get Bars failed.
 
Serj_Che :

Tamam, ilginç!

Göstergeler kendi işlerinde, Uzman Danışmanlar kendi işlerinde çalışır. Tabii tek çekirdekli bir taş değilse.

Her şey tam olarak belgelerde yazıldığı gibi olur. :)

Doğrulama için bir gösterge ve bir EA + videodaki sonucu çizdim.

1) İlk olarak, OnTick içinde 20 saniye çalışan bir işlevi olan bir Uzman Danışmanı çizelgeye atıyorum.

Sonuç - sohbet çalışmaya ve her şeyi olması gerektiği gibi görüntülemeye devam eder. Cam da olması gerektiği gibi çalışıyor.

2) Ardından, OnCalculate içinde 20 saniye boyunca çalışan bir işlevi olan bir göstergeyi çizelgeye atıyoruz.

Sonuç - sohbet kilitleniyor. Ayrıca farklı bir periyodun ayarlandığı aynı sembole sahip komşu sohbet de donuyor. Cam olması gerektiği gibi çalışmaya devam ediyor. İşlev çalıştıktan sonra her şey normale döner.

3) Bu videoda yok - ancak bir sohbete (60 saniye ayarlayın) ve başka bir uzmana bir gösterge koyarsanız, uzman diğer sohbetteki gösterge kapanana kadar çalışmaya başlamaz!!!

Videoyu ayrı olarak ekledim - tarayıcımda yavaşlıyor.

 
MigVRN :

Her şey tam olarak belgelerde yazıldığı gibi olur. :)

Doğrulama için bir gösterge ve bir uzman + videodaki sonucu çizdim.

1) İlk olarak, OnTick içinde 20 saniye çalışan bir işlevi olan bir Uzman Danışmanı çizelgeye atıyorum.

Sonuç - sohbet çalışmaya ve her şeyi olması gerektiği gibi görüntülemeye devam eder. Cam da olması gerektiği gibi çalışıyor.

2) Ardından, OnCalculate içinde 20 saniye boyunca çalışan bir işlevi olan bir göstergeyi çizelgeye atıyoruz.

Sonuç - sohbet kilitleniyor. Ayrıca farklı bir periyodun ayarlandığı aynı sembole sahip komşu sohbet de donuyor. Cam olması gerektiği gibi çalışmaya devam ediyor. İşlev çalıştıktan sonra her şey normale döner.

3) Bu videoda yok - ama bir sohbete (60 saniye koyun) ve başka bir uzmana bir gösterge koyarsanız - uzman, diğer sohbetteki gösterge kapanana kadar çalışmaya başlamaz!!!

Videoyu ayrı olarak ekledim - tarayıcımda yavaşlıyor.

Teşekkürler, videoyu izleyemiyorum, çalışacağım.

 

Bir göstergeden çalışırken ticaret ortamından veri almaya çalışıyorsanız, OnInit()'te istek ayarlamaya bile çalışmayın. Sorgular yapın ve yanıtı OnCalculate() içinde kontrol edin. Başka birinin cihazından veya başka bir zaman diliminden veri alırken, ilk seferde OnCalculate() içinde bile veri alamayacağınız pratik olarak garanti edilir. Bu nedenle, dönüş değerlerini kontrol edin. Değerler alınmazsa, OnCalculate() içindeki bir sonraki tikteki verileri almaya çalışın.


Servis masası yanıtı da ilginçtir - sağlanan kod.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

FORTS Lütfen yardım edin

alexvd , 2015.03.26 15:48

Servis masasında size kaynak verildi. Son kodunuzu Test() işlevine koymayı deneyin.

Zaten bir spor ilgisi - yazar kendi kodunu yazmaya devam ediyor ve hizmet masası kodunu görmezden mi geliyor?

 
barabashkakvn :

Bir göstergeden çalışırken ticaret ortamından veri almaya çalışıyorsanız, OnInit()'te sorguları ayarlamaya bile çalışmayın. Sorgular yapın ve yanıtı OnCalculate() içinde kontrol edin. Başka birinin cihazından veya başka bir zaman diliminden veri alırken, ilk seferde OnCalculate() içinde bile veri alamayacağınız pratik olarak garanti edilir. Bu nedenle, dönüş değerlerini kontrol edin. Değerler alınmazsa, OnCalculate() içindeki bir sonraki tikteki verileri almaya çalışın.

+++ ve benzeri zafere kadar. Yani veri yoksa - dönüş;
 
MigVRN :
+++ ve benzeri zafere kadar. Yani veri yoksa - dönüş;
Ne sorduğuna bağlı. Ve kaç tane istekte bulunulacağı - zaten tamamen kod yazarının tercihlerine bağlı.
 
barabashkakvn :
Ne sorduğuna bağlı. Ve kaç tane istekte bulunulacağı - zaten tamamen kod yazarının tercihlerine bağlı.

Bunu anlıyor musun

terminalde veri varsa, o zaman fonksiyon

 SeriesInfoInteger ( symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE , first_date )

YANLIŞ döndürmeli değil mi?

P/S SD kodu İLK KEZ ÇALIŞMIYOR!

 

YENİDEN.

yardımdan:

SeriBilgiTamsayı

Geçmiş verilerin durumu hakkında bilgi verir. İşlev için 2 seçenek vardır.

İkinci seçenek:

 bool    SeriesInfoInteger (
   string                      symbol_name,     // имя символа
   ENUM_TIMEFRAMES             timeframe,       // период
   ENUM_SERIES_INFO_INTEGER    prop_id,         // идентификатор свойства
   long &                      long_var         // переменная для получения информации
   );

SERIES_TERMINAL_FIRSTDATE

Dönemden bağımsız olarak, istemci terminalinde sembolle tarihteki ilk tarih

tarih saat

TERMİNALDE VERİ VARSA FONKSİYON YANLIŞ DÖNMEMELİDİR!!!

Onu nerede aramazsın!