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

 

Teşekkür ederim ! Kod daha basit hale geldi. Kesinlikle daha kolay.

Kayma için teşekkürler!

for döngüsü (int A = 0; A <100 ; A++) // bu çubuk sayımı işe yaramaz, en azından günlükten, danışmanın tam olarak okların olduğu yere sipariş verdiğini veya hata numarasını görüyorum. . Mesele şu ki, test cihazında sinyal yoktu. Aynı baskılarda ok 1 ve 2 değişkenlerinin tüm çubuklarda sadece sıfır olduğunu gördüm ve bu yüzden durumdan çıktım.

Döngü elbette herhangi bir yönde düşünülebilir. Ve yine her yerde 129 hatası görüyorum! Grafikte gösterge okları görüyorum ve bunlara sipariş verildiğinden emin olmak istiyorum. Yani, ekranda, önce 1 ve 2 ok değişkenleri eşittir, sonra sıfırdan 17. çubukta bir sipariş verilir - tamam, süper!! Daha sonra, basılı mesajlar şöyle ve böyle bir kene ile bir satış olduğunu ve diğer çubuklardaki okların eşit olduğunu - harika !!!

 
Ardından, kırmızı oktaki satışı kaldırmanız ve satın alma işlemini ayarlamanız gerekir. Aniden iki sipariş silindi!!! İki - açıkça ortaya çıkan ve var olmayan bir tane daha!! Pekala, canı cehenneme... Hata 129 çıkıyor ve arama emri yok! Tüm iyi gönüllü asistanları bu kadar karıştırdığım için kusura bakmayın..
 
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot         = 1;                          
  extern int     taymfreym   = 0 ;                           
  extern double  stoplos     = 200 ;                          
  extern double  takeprofit  = 500 ; 
  extern int     magicnumber = 350;
  extern int     ControlBar  = 1;      // номер бара на котором снимаем показания индикатора                     


void BreakPoint()
{//if (!IsVisualMode()) return(0);
    keybd_event (19,0,0,0);
    Sleep (10);
    keybd_event (19,0,2,0);
}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
{
  //Print (   "  Начало " ); 
//----
    for (int A = 0; A <100 ; A++) // ни к чему этот перебор баров
    {
        double strela1 = iCustom (NULL, taymfreym, "индикатор", 2, A),
               strela2 = iCustom (NULL, taymfreym, "индикатор", 3, A);
        int BUY = 0, SELL = 0, ticket; 
        Print (A, "  strela1 " , strela1 , "    strela2  " , strela2);
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {  
        if (!OrderSelect (i - 1, SELECT_BY_POS)) continue;  // Если есть следующий
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber() != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        ticket = OrderTicket();
        if (type == 0) {BUY++; Print ("BUY++   " , BUY  ,"  ticket ", ticket); break;}
        if (type == 1) {SELL++; Print ("SELL++   " , SELL  ,"  ticket ", ticket); break;}
    }
    if (strela1 < strela2)
    {
        if (SELL > 0) udalenie (OP_SELL);
        if (BUY == 0)
        {
            OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
            Print ("strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
            NormalizeDouble ( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits));
        }
    }
    else if (strela1 > strela2)
    {
        if (BUY > 0) udalenie (OP_BUY);
        if (SELL == 0)
        {
            OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print ("strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
            NormalizeDouble (Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits);
        }
    }
    }
    BreakPoint();     
//----
    return (0);
}
//+------------------------------------------------------------------+

void udalenie (int Type = -1)
{
    int total = OrdersTotal();
    for (i = total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber( ) != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        if (Type > -1) if (Type != type) continue;
        bool result = false;
        switch (type)
        { 
            case OP_BUY       : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
            case OP_SELL      : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
        }
        if (!result)
        {
            int error =  GetLastError(); 
            string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
            Print (errorcomment);
        }  
    }       
}
 
Bir dakika, afedersiniz, her yere fiş koyacağım!
 
Dimka-novitsek :
Ardından, kırmızı ok üzerindeki satışı silmeniz ve satın alma işlemini ayarlamanız gerekir. Aniden iki sipariş silindi!!! İki - açıkça ortaya çıkan ve var olmayan bir tane daha!! Pekala, canı cehenneme... Hata 129 çıkıyor ve arama emri yok! Tüm iyi gönüllü asistanları bu kadar karıştırdığım için kusura bakmayın..

Dimka - PM'de bana kodunu ver - Alacağım - Henüz yapacak bir şeyim yok, " kase "m test edilirken ... ve beyin bir yük gerektiriyor ... ve hindiyi unutma ...
 

Herkese merhaba, ben bir acemiyim, bu yüzden lütfen beni çılgınca tekmeleme. Birkaç soru geldi.

1) Alıntıların tam geçmişini nereden indirebilirim. Anladığım kadarıyla, MT4 teriminde, varsayılan olarak, alıntılar MetaQuotes'tan indiriliyor, ancak orada Ocak 2012'den Ekim 2012'ye kadar bir delik bulundu ve yeniden yüklenirken kapanmıyor. Bu, oradan tüm hikaye hakkında şüphe uyandırıyor.

2) Tarihte 1999'dan önceki tarihler var, bunlarla ilgili veriler bir şekilde garip, çok azı var, dakikası bile olsa. Bunları dikkate alan veya silen var mı?

3) Ve test sırasında devam eden bazı saçmalıklar. Bir kalem testi kadar basit bir Expert Advisor yazmaya karar verdim: Buy with Open[1]<MA1 && Close[1]>MA1 ile Sat, sırasıyla tam tersidir. Yani test sırasında MA (üssel) testin başlama tarihine bağlı olarak her zaman farklı değerler gösterir. Bu durumda, MA süresi (örneğin, 1000-1200) ne kadar uzun olursa, hata o kadar büyük olur. Sorun nedir?

 
Dimka-novitsek :

Teşekkür ederim ! Kod daha basit hale geldi. Kesinlikle daha kolay.

Kayma için teşekkürler!

for döngüsü (int A = 0; A <100 ; A++) // bu çubuk sayımı işe yaramaz, en azından günlükten, danışmanın tam olarak okların olduğu yere sipariş verdiğini veya hata numarasını görüyorum. . Mesele şu ki, test cihazında sinyal yoktu. Aynı baskılarda ok 1 ve 2 değişkenlerinin tüm çubuklarda sadece sıfır olduğunu gördüm ve bu yüzden durumdan çıktım.

Döngü elbette herhangi bir yönde düşünülebilir. Ve yine her yerde 129 hatası görüyorum! Grafikte gösterge okları görüyorum ve bunlara sipariş verildiğinden emin olmak istiyorum. Yani, ekranda, önce 1 ve 2 ok değişkenleri eşittir, sonra sıfırdan 17. çubukta bir sipariş verilir - tamam, süper!! Daha sonra, basılı mesajlar şöyle ve böyle bir kene ile bir satış olduğunu ve diğer çubuklardaki okların eşit olduğunu - harika !!!

Döngü hakkında:

 for ( int A = 0 ; A < 100 ; A++)

Herhangi bir şey yapmadan (kod yazmadan) önce, ne elde etmek istediğimizi AÇIKÇA anlamanız gerekir. Bu göstergeyi her tikte zaten yeniden hesapladınız ve okumalarına göre eksiksiz bir düzene sahip olabilirsiniz. Bu formda (döngü) strela1 ve strela2 değişkenlerinde çıkışta 100. barda okumalarınız olacak ve bu okumalara göre işlem yapıyorsunuz (geçen kış)... :))) Doğru dikkat etmedim uzakta - TEKRAR gösterge okumalarının döngü numaralandırmasına alım satım işlemlerini dahil ettiniz - tam P ... Siz, elbette, daha iyi bilirsiniz. :)))

 
Hayır, girdi-çıktıyı görmek için bir döngüye ihtiyacım var, yani robotu test etmek için. Emir verirken hatalar oluyor. Eh, test cihazında test edilmiyor ..
 
Dimka-novitsek :
Hayır, girdi-çıktıyı görmek, yani robotu test etmek için bir döngüye ihtiyacım var. Emir verirken hatalar oluyor. Eh, test cihazında test edilmiyor ..

Ne diyebilirim ki - GENIUS ... iyi şanslar!

Not: Siparişlerin numaralandırılması yönündeki bir değişiklik nedeniyle kodumda küçük bir hata buldum, kodu daha da azalttım ve ayrıca test cihazında optimize edilebilirlik yaratma girişiminde bulundum (kendiniz kontrol edin).
Ve göstergeden doğru şekilde veri almadığınıza dair bir şüphe var. Göstergenin birkaç arabelleği var (benim versiyonumda 4). Bazılarında mesela ok çizenlerde SADECE okun olduğu yerde bir değer vardır. Dönen değerin (benim EMPTY_VALUE sürümümde ) "boş" bir değere eşit olmaması koşuluyla bir döngü (while()) düzenleyerek bu tür arabelleklerdeki sinyalleri aramak gerekir. "Okların olmadığı" yerlerde (bu tamponlarda), döndürülen değeri ve fiyatı karşılaştırarak bir sinyal aramanız gerekir.

Dosyalar:
lxvhlxyx.mq4  5 kb
 

İyi günler veya geceler! Soru, olduğu gibi, mt4'ün geliştiricilerine ve diğer herkese de.

İstemcinin kendisinde yerleşik olarak bulunan MT için minimum sistem gereksinimleri nelerdir?

Eski donanımda çalıştırmak istedim: Athlone 800MHz, 512mb, XP SP3. MT 4 veya 5'i başlattığınızda, 2 saniye sonra hemen çöküyor. Sorun açıkça Windows'ta veya donanımda değil, bu donanıma bir hata ayıklayıcılı Visual Studio yüklendi (ben kendim bir programcıyım) ve sistemde istisna oluşmuyor (çünkü hata ayıklayıcı benim için çalışmıyor). Ve anladığım kadarıyla müşterinin kendisi bir şeyden hoşlanmıyor ve sonunda pes ediyor. Peki, soru şu ki, nedeni nedir ve mt neyi sevmiyor, gerçekten CPU frekansı mı? ))

Neden: