[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 402

 
hoz :

Vadim, senin yazdığının aynısını yapardım! Bu yüzden soruyu sordum. Belki bilmiyordum diye düşündüm. Hala kendi mantığımı ve diğer programcıların mantığını izliyorum. Çünkü ana mantığa ek olarak, bir takım faktörlerin de dikkate alınması gerektiğini görüyorum.

RefreshRates(), EA dizisindeki geçmişi günceller. MarketInfo(), sunucudan veri alır. Güncelleme gerekmez. Ekstra fren.

Güncellemeniz gerekiyorsa, RefreshRates () öğesine yapılan basit bir çağrı hiçbir şey vermeyebilir. Tüm tarihin gelişi olayını bir şekilde kontrol etmek ve işlemek gerekir.

 
merhaba metaeditör programı nasıl kullanılır?
 
crespo1985 :
merhaba metaeditör programı nasıl kullanılır?


Merhaba! Nasıl istersen öyle kullan! Bu tür sorularla burada değilsiniz.. İşte bir programcı forumu..

Zhunko :

RefreshRates(), EA dizisindeki geçmişi günceller. MarketInfo(), sunucudan veri alır. Güncelleme gerekmez. Ekstra fren.

Güncellemeniz gerekiyorsa, RefreshRates () öğesine yapılan basit bir çağrı hiçbir şey vermeyebilir. Tüm tarihin gelişi olayını bir şekilde kontrol etmek ve işlemek gerekir.

Evet. Anladığım kadarıyla, RefreshRates() piyasa verilerini günceller (geçmişi şu anki zamana kadar) ve ardından piyasa ortamı değişkeni alınan değerlerin sonunu kullanır. Anladığım kadarıyla, bu tek mantıklı seçenek. Bununla, bu fonksiyon daha kolay ve daha hızlı ve daha mantıklı ve daha pratik ve daha güvenilir yazılacak, bunun gibi?

 double fGet_TradePrice( int fi_price,     // Цена: 0 - Bid; 1 - Ask
                       string fs_symbol)   // валютная пара
{
   double ld_price = 0.0 ;
   
   switch (fi_price)
   {
         case 0 :
         if (fs_symbol == Symbol ())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);
         
         case 1 :
         if (fs_symbol == Symbol ())
         {
             RefreshRates();
             ld_price = Ask;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_ASK);
   }
}
 
hoz :

Evet. Anladığım kadarıyla, RefreshRates() piyasa verilerini günceller (geçmişi şimdiki zamana kadar) ve ardından piyasa ortamı değişkeni alınan değerlerin sonunu kullanır. Anladığım kadarıyla, bu tek mantıklı seçenek. Bununla, bu fonksiyon daha kolay ve daha hızlı ve daha mantıklı ve daha pratik ve daha güvenilir yazılacak, bunun gibi?

Bunu isterdim:

 double TradePrice( int     nPriceId, // Цена: 0 - Bid; 1 - Ask
                  string sSymbol)   // валютная пара
 {
   switch (nPriceId)
   {
     case 0 : return (MarketInfo(sSymbol, MODE_BID));
     case 1 : return (MarketInfo(sSymbol, MODE_ASK));
     default : Print ( "Ошибка и прочее..." );
   }
   return ( 0 );
 }

Geçmişi güncellemek için ayrı bir fonksiyon yazmanız gerekir.

 

Farklı koşulların daha fazla test edilmesi için 2 saattir bir test parçası yazmaya çalışıyorum.

Çalışmıyor!

bana hatayı söyle lütfen

int mm;


if (mm== 0 ) { B=Bid; mm= 1 ;} 

OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES); 

if ( (Bid> B+ 0.0002 ) && ( OrdersTotal ()== 0 || OrderType()==OP_SELL) ) { My_close(); My_buy (); My_modify(); }  

if ( (Bid< B- 0.0002 ) && ( OrdersTotal ()== 0 || OrderType()==OP_BUY ) ) {My_close(); My_sell (); My_modify(); }
  

siparişlerin 2pp'den sonra kendi yönlerine açılması mantıklı.

sat açılır ve biter...

 

Güzel gün! Banallik için özür dilerim. Robottan çizgiler, bir yıldan fazla bir süredir bir robotum var ve prensipte, bu tür bir döngü değişmez bir şekilde birinden diğerine dolaşıyor.

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
      {   if ( OrderSelect (i,SELECT_BY_POS)&&OrderSymbol()== Symbol ()&&OrderMagicNumber()==magic)

Neden toplam siparişlerim eksi bir? Döngünün değişkeni azalttığı doğru mu ve?

 

Kim'in işlevi, parametre saatine sahiptir = " 1970'den beri saniye cinsinden tarih ve saat "

2 seçenek denedim

ve her ikisi de o gün için değil, tüm tarihin tam kârını verir....

 int t=(     TimeCurrent ()-( (Hour()* 3600 ) +(Minute()* 60 )+Seconds()   ) ); 
int t=(    (Hour()* 3600 ) +(Minute()* 60 )+Seconds()    ); 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит в валюте депозита                  |
//|             закрытых с определённой даты позиций                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInCurrency( string sy= "" , int op=- 1 , int mn=- 1 , datetime dt=0)
{
   double p= 0 ;
   int     i, k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
   return (p);
}
 
Dimka-novitsek :

Güzel gün! Banallik için özür dilerim. Robottan çizgiler, bir yıldan fazla bir süredir bir robotum var ve prensipte, bu tür bir döngü değişmez bir şekilde birinden diğerine dolaşıyor.

Neden toplam eksi bir siparişlerim var? Döngünün değişkeni azalttığı doğru mu ve?

Döngü, dizini 0'dan Toplam-1'e veya Toplam-1'den 0'a kadar sayar. Bu nedenle, eksi işaretine veya küçüktür işaretine ihtiyacınız vardır < .
 
Zhunko :

Bunu isterdim:

 double TradePrice( int     nPriceId, // Цена: 0 - Bid; 1 - Ask
                   string sSymbol)   // валютная пара
 {
   switch (nPriceId)
   {
     case 0 : return (MarketInfo(sSymbol, MODE_BID));
     case 1 : return (MarketInfo(sSymbol, MODE_ASK));
     default : Print ( "Ошибка и прочее..." );
   }
   return ( 0 );
 }

Veri alma yoluyla   MarketInfo(), bu pencerenin aracı için bile bence kaynaklar açısından pahalı olacak değil mi?

Zhunko :

Geçmişi güncellemek için ayrı bir fonksiyon yazmanız gerekir.


Ayrı bir işlev yazmanın arkasındaki mantığı tam olarak anlamıyorum. Sonuçta, RefreshRates() işlevinin kendisi önceden tanımlanmış değişkenlerin verilerini güncellemeye yarar. Ve Bid ve Ask sadece önceden tanımlanmış değişkenlerdir. RefreshRates() işlevi önceden tanımlanmış değişkenleri güncelliyorsa, neden herhangi bir ek işlev yazalım?Açıklayabilir misiniz?
 
Teşekkürler!!
Neden: