MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 550

 
iv1986 :

Kodun sonunda Alert(result.retcode);

genel dergide:

2018.05.14 12:08:16.984 Kodlar komut dosyası LIMIT (Si-6.18,M15) başarıyla yüklendi

2018.05.14 12:08:17.187 ticaret '992940': satın alma limiti 3.00 Si-6.18, 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 ticaret '992940': kabul edilen satın alma limiti 3.00 Si-6.18, 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 ticaret '992940': satın alma limiti 3.00 Si-6.18 at 62091 (62092) sl: 61821 tp: 62905 yürütme için yerleştirildi

2018.05.14 12:08:17.546 ticaret '992940': sipariş #13235300 satın alma limiti 3.00 / 3.00 Si-6.18, 62091'de 337.532 ms'de yapıldı

2018.05.14 12:08:17.578 Kodlar komut dosyası LIMIT (Si-6.18,M15) kaldırıldı

Uzmanlar sütununda: 2018.05.14 12:08:17.578 SINIR (Si-6.18,M15) Uyarı: 10009, başka bir şey yok

Peki, sana nasıl yardımcı olabilirim? İlk olarak, Satış Limitinin belirlenmediğini yazar ve günlükten alıntılar sağlarsınız. Şimdi bir Buy Limit emrinden bahsediyoruz. Sorunun bir tür yüzen olduğu ortaya çıktı. Ayrıca, hiçbir zaman bir ifade getirmediler. Gerçekte arama emrinin görünmediğini söylüyorsunuz. Bir açıklama durumu netleştirmeye yardımcı olabilir.

 
void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
 int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);  
 double p=NormalizeDouble(ChartPriceOnDropped(),digits); 
 if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
 {p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
 } 
 int V=75;
           if (p<Ask)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));  
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                             
             request.type     =ORDER_TYPE_BUY_LIMIT;                        // тип ордера
             request.price    =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits);     // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Ask+(Ask-p)*3,digits);    // Take Profit позиции
             request.type_filling=ORDER_FILLING_IOC;
             request.type_time=ORDER_TIME_DAY;
             request.stoplimit=Ask;
             OrderSend(request,result);
            }
         if (p>Bid)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))); 
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                                      // объем 
             request.type     =ORDER_TYPE_SELL_LIMIT;                        // тип ордера
             request.price    =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits);      // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Bid-(p-Bid)*3,digits); // Take Profit позиции
             request.type_time=ORDER_TIME_DAY;
             request.type_filling=ORDER_FILLING_IOC;
             request.stoplimit=Bid;
             OrderSend(request,result);
            }  
       
       Alert(result.retcode);          
     return;
   }
 
Ihor Herasko :

Peki, sana nasıl yardımcı olabilirim? İlk olarak, Satış Limitinin belirlenmediğini yazar ve günlükten alıntılar sağlarsınız. Şimdi bir Buy Limit emrinden bahsediyoruz. Sorunun bir tür yüzen olduğu ortaya çıktı. Ayrıca, asla bir ifade getirmediler. Gerçekte arama emrinin görünmediğini söylüyorsunuz. Bir açıklama durumu netleştirmeye yardımcı olabilir.

Ne Satış Limiti ne de Alış Limiti belirlenmemiştir, Alert (result.retcode) 10009 döndürür. Bu "ifadeyi" nereden bulabilirim, ne yapmalıyım?

 
iv1986 :

Bu kodu kendim çalıştırdım. Burada başlatma marjı olmadığından, değiş tokuş olmayan sembollerde 0'a bölme hatası alacağınızı unutmayın.

Başlatmanın mümkün olduğu yerlerde, bir ses kontrolü eklemek zorunda kaldım. Aksi takdirde, sesin sıfır olduğu ortaya çıktı:

 if (request.volume < SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN ))
   request.volume = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );

Bundan sonra sipariş başarıyla verilir. Ayrıca oldukça hızlı çalıştığını unutmayın - fiyata yakın. Bu nedenle, siparişin kendisini fark etmek için zamanınız olmayabilir. Hesap türü netleştirme ise pozisyona dönüşür veya pozisyona katılır.

 
iv1986 :

Ne Satış Limiti ne de Alış Limiti belirlenmemiştir, Alert (result.retcode) 10009 döndürür. Bu "ifadeyi" nereden bulabilirim, ne yapmalıyım?

Araçlar penceresinin Geçmiş sekmesi. Bağlam menüsünden "Siparişler"i seçin . Ardından ayrıca "Rapor" - "HTML" içerik menüsünden. Ancak, muhtemelen, siparişin olmamasının nedenini görebileceksiniz: durumu "dolu" olarak işaretlenecektir.

 

2009 için bir komut dosyası buldum ve şimdi bir uyarıyla derleniyor: 'M' - tanınmayan karakter kaçış dizisi 1.mq4 66 37

PapkaFiles    = TerminalPath ()+ "\MQL4\Files\\" ; //Путь к терминалу 

Doğru derlenmesi için satırda neyi düzelteceğimi söyle

 
Ihor Herasko :

Bu kodu kendim için koştum. Değiştirilmeyen sembollerde 0'a bölme hatası alacağınızı unutmayın, çünkü orada başlatma marjı yoktur.

Başlatmanın mümkün olduğu yerlerde, bir ses kontrolü eklemek zorunda kaldım. Aksi takdirde, sesin sıfır olduğu ortaya çıktı:

Bundan sonra sipariş başarıyla verilir. Ayrıca oldukça hızlı çalıştığını unutmayın - fiyata yakın. Bu nedenle, siparişin kendisini fark etmek için zamanınız olmayabilir. Hesap türü netleştirme ise pozisyona dönüşür veya pozisyona katılır.

Teşekkür ederim!
 
HeAic :

2009 için bir komut dosyası buldum ve şimdi bir uyarıyla derleniyor: 'M' - tanınmayan karakter kaçış dizisi 1.mq4 66 37

Doğru derlenmesi için satırda neyi düzelteceğimi söyle

MQL4'ten önce çift ters eğik çizgi koyun
 
Merhaba, MT4'teki hesaba kopyalama sinyali ve robotu nasıl bağlayacağımı ve hepsini vps'e nasıl bağlayacağımı söyler misiniz?
 
Artyom Trishkin :
MQL4'ten önce çift ters eğik çizgi koyun
ve F'den önce de. Tüm eğik çizgiler çift olmalıdır