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

 
MaxZ :

Merhaba.

Soru: OrderSend() işlevi, yürütmeden sonra "0" değerini veya "-1"'den küçük bir değer döndürebilir mi? Böyle bir şeyle karşılaşan var mı? Veya "belgelerde" verilen bilgiler güvenilirdir:

Not: Telepat olarak çalışıyorum, başka birinin kodunda hata arıyorum...

Selam!

Peki neden olmasın? Örneğin, bir yeniden fiyat teklifi nedeniyle bir sipariş açılmazsa ...

Bunu yapmak için, siparişleri fiilen açmak için bir döngü vardır, örneğin, bunun gibi - hata işlemeli açma girişimlerinin sayısı:

 int NumberOfTry = 25 ;
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+

void WmOrderSend( string symbol, int cmd, double volume, double price, double stoploss, double takeprofit, string comment, int magic, datetime expiration = 0 )
{
   color clr;
   datetime opentime;
   int ticket;
   int error;
  
   comment = WindowExpertName () + " " + GetNameTF( Period ()) + " " + comment;
   int msl = MarketInfo (symbol, MODE_STOPLEVEL);
   clr = CLR_NONE ;
   if (cmd == OP_BUY)  clr = ColorBuy;
   else if (cmd == OP_SELL)  clr = ColorSell;   
   if ((expiration > 0 ) && (expiration < TimeCurrent ()))   expiration = 0 ;
  
   for ( int try = 1 ; try <= NumberOfTry; try++)
   {
       if (! IsTesting () && (! IsExpertEnabled () || IsStopped ()))       break ;   
       while (! IsTradeAllowed ())       Sleep ( 5000 );
    
       RefreshRates ();
      opentime = TimeCurrent ();
      ticket = OrderSend (symbol, cmd, volume, price, SlipPips, stoploss, takeprofit, comment, magic, expiration, clr);
       if (ticket > 0 )
         if (UseSound)      { PlaySound ( "ok.wav" ); break ;}      
       else
      {
         error = GetLastError ();
         if (error == ERR_TRADE_TIMEOUT)
         {
             Sleep ( 1000 * 66 );
             if (ExistOrders(symbol, cmd, magic, opentime))
            {
               if (UseSound) { PlaySound ( "ok.wav" ); break ;}
            }
         }
        
         Print ( "Error(" , error, ") set order: " , ErrorDescription(error), ", try " , try);
         continue ;
      }
      
       Print ( "Error(" , error, ") set order: " , ErrorDescription(error), ", try " , try);
       Print ( "Ask=" , Ask, "  Bid=" , Bid, "  symbol=" , symbol, "  volume=" , volume, "  cmd=" , GetNameOP(cmd), "  price=" , price, "  stoploss=" , stoploss, "  takeprofit=" , stoploss, "  magic=" , magic);
       if ((error == ERR_COMMON_ERROR) || (error == ERR_ACCOUNT_DISABLED) || (error == ERR_INVALID_ACCOUNT) || (error == ERR_TRADE_DISABLED))
        {
         IsExpertFailed = true;
         break ;
        }      
       if ((error == ERR_SERVER_BUSY) || (ERR_INVALID_TRADE_VOLUME) || (error == ERR_MARKET_CLOSED))
        {
         Sleep ( 1000 * 300 ); 
         break ;
        }      
       if ((error == ERR_TOO_FREQUENT_REQUESTS) || (error == ERR_TOO_MANY_REQUESTS))     Sleep ( 1000 * 100 );      
       if ((error == ERR_ORDER_LOCKED) || (error == ERR_LONG_POSITIONS_ONLY_ALLOWED) || (error == ERR_TRADE_TOO_MANY_ORDERS))       break ;      
       if (error == ERR_TRADE_CONTEXT_BUSY) while ( IsTradeContextBusy ()) Sleep ( 1000 * 11 );
      
       if (error == ERR_TRADE_EXPIRATION_DENIED )  {expiration = 0 ; continue ;}      
       if ((error != ERR_PRICE_CHANGED) && (error != ERR_REQUOTE))   Sleep ( 1000 * 7.7 );
   }      
}
 
Roman. :

Selam!

Peki neden olmasın? Örneğin, bir yeniden fiyat teklifi nedeniyle bir sipariş açılmazsa...

Merhaba Roman.

Çünkü genellikle OrderSend() işlevi hata durumunda "-1" döndürür... "0" değil ve kesinlikle "-1"den az değil. Ama yine de, belki birinin emsalleri vardı?

 
MaxZ :

Merhaba Roman.

Çünkü genellikle OrderSend() işlevi hata durumunda "-1" döndürür... "0" değil ve kesinlikle "-1"den az değil. Ama yine de, belki birinin emsalleri vardı?

Bu arada, hatalar pahasına ilginç bir konu. 0 (sıfır) dönerse hata olmadığını ve siparişin komisyoncu tarafından kabul edildiğini öğrendim. Kabul edilmezse, sıfırdan büyük bir hata döndürülür. OrderSend () operatörünün açıklamasında "...veya arıza durumunda -1" girişi vardır. Ancak, aracının -1 döndürmesi için ne tür bir hata olmalıdır? Belki biri bilir?
 
MaxZ :

Merhaba Roman.

Çünkü genellikle OrderSend() işlevi hata durumunda "-1" döndürür... "0" değil ve kesinlikle "-1"den az değil. Ama yine de, belki birinin emsalleri vardı?


Send() emri "0" ve hatta daha fazla < -1 döndürürse, muhtemelen BELİRLİ bir mutfakta işlem yapmak gerekir. :-)
 
paladin80 :
Bu arada, hatalar pahasına ilginç bir konu. 0 (sıfır) dönerse hata olmadığını ve siparişin komisyoncu tarafından kabul edildiğini öğrendim. Kabul edilmezse, sıfırdan büyük bir hata döndürülür.
GetLastError() işlevi 0 mı döndürüyor? Yoksa hala OrderSend() işlevi hakkında mı yazıyorsunuz?


paladin80 :
OrderSend () operatörünün açıklamasında "...veya arıza durumunda -1" girişi vardır. Ancak, aracının -1 döndürmesi için ne tür bir hata olmalıdır ? Belki biri bilir?

OrderSend() "-1" döndürür. Ve hatanın türü GetLastError() işlevi kullanılarak kontrol edilmelidir!! Bunu karıştırmayın... "1" hata kodu var, yani "Hata yok ama sonuç bilinmiyor"... Ama "-1" kodunda bir hata görmedim ve var sanırım. Yok! :D

 
MaxZ :
GetLastError() işlevi 0 mı döndürüyor? Yoksa hala OrderSend() işlevi hakkında mı yazıyorsunuz?


OrderSend() "-1" döndürür. Ve hatanın türü GetLastError() işlevi kullanılarak kontrol edilmelidir!! Bunu karıştırmayın... "1" hata kodu var, yani "Hata yok ama sonuç bilinmiyor"... Ama "-1" kodunda bir hata görmedim ve var sanırım. Yok! :D


Belki de gerçekten karıştırdım. Bir kez daha OrderSend ve hataları dikkatlice okudum. Muhtemelen mesele şudur ki, komisyoncu siparişi kabul ederse, bilet numarasını döndürür ve bu işlem için GetLastError 0'ı gösterir. Kabul edilmezse, -1 ve GetLasError sıfırdan büyük bir hata numarası gösterir.
 

Güzel gün. Lütfen bana bir referans noktası belirlemenize izin veren bir fonksiyonla period_converter'ı nereden alabileceğinizi söyleyin. Örneğin, D1'den bir D2 grafiği yapmam gerekiyor, başlangıçta YYY.MMM.DDD SS.MM ayarladım ve bu tarihten itibaren mumları dönüştürmeye başlıyor.

Her nasılsa uzun zamandır benzer bir şey buldum (bence bu forumda bile), ama nedense çift sayılardan dönüştürmeye başlamak istemiyor (tekten başlıyor ve bu kadar) Bana ne yapacağımı söyleyebilir misiniz? kodu değiştirin veya kendiniz değiştirin. Çok minnettar kalırım. İşte bulduklarım.

Dosyalar:
 
Tünaydın! Göstergeden zaman dilimini değiştirmek mümkün müdür? Penceredeki platformda zaman çerçevesi ne değiştirir?
 

Sayın Arkadaşlar

Acemiyim ve son zamanlarda forex ile çalışıyorum, yerel gurulardan tavsiye almak istiyorum.

MT4 altındaki terminalle çalışıyorum

Bir döviz çifti için bir grafikle çalışırken, ölçeği değiştirmek uygundur: "M1", "M5",....

Böylece, M1 ölçeğinde, son 38 saatin geçmişi, yaklaşık 2000 mum şeklinde, M5 270 saatte ve ayrıca yaklaşık 2000 mum şeklinde görüntülenir.

Aynı zamanda, ilk durumda mum için zaman çerçevesi 60 saniye olacak ve ikinci durumda 470 saniye olacaktır. 60 saniyelik mumlara bölünerek tarihi 270 saat (veya daha fazla) bir şekilde çıkarmak mümkün müdür?

şimdiden teşekkürler

 
paladin80 :
Belki de gerçekten karıştırdım. Bir kez daha OrderSend ve hataları dikkatlice okudum. Muhtemelen mesele şudur ki, komisyoncu siparişi kabul ederse, bilet numarasını döndürür ve bu işlem için GetLastError 0'ı gösterir. Kabul edilmezse, -1 ve GetLasError sıfırdan büyük bir hata numarası gösterir.

Şimdi her şey olması gerektiği gibi... Aksi takdirde, cevabınız beni biraz şaşırttı! :)))


Ama sorum hala geçerli. OrderSend() işlevi "0" veya "-1"'den küçük bir değer döndürebilir mi?


Günlük dosyası göndermek istedim... Ama bana göndermiyorlar. Bu yüzden, uzun zaman önce engelin ne olduğunu anlardım. Bu arada telepati yapmaya devam ediyorum! ;))) Ama birden OrderSend() işlevi garip mi? :DD