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

 
ObjectCreate'de neden 2 ila 30 puan arasında zaman ve fiyat var? Grafiğe eklemeye çalıştım, sadece ilk nokta görüntüleniyor
 ObjectCreate ( 0 , "name" , OBJ_ARROW_LEFT_PRICE , 0 , TimeCurrent ()- 600 , 1.29400 , TimeCurrent ()- 1200 , 1.29500 );   
 
Valerius :

Bu kodu OnInit'te değil, OnTick()'te yazmanız gerekir.

Denedim hiç çalışmıyor.
1 uyarı
 
Igor Makanu :

izin verilmedi

Şablonların nasıl çalıştığını açıklayamam.... peki, nasıl - böyle bir işleve bir çağrı gelene kadar, derleyici bunun varlığı hakkında hiçbir şey bilmez (çoğu zaman eğer yoksa derleme hatası bile yoktur). aramak)

o zaman böyle bir şablon işlevi çağırırsınız ve derleyici gerekli türleri değiştirir ve ancak o zaman her şeyin doğru çalışıp çalışmadığını kontrol eder.

ve sonra başka tür parametrelerle başka bir şablon çağrısı yaparsınız - ve derleyici yeni bir işlev oluşturur, yani. bir tane daha, yani aslında, aynı şeyi 2 kez, ancak farklı türde parametrelerle 2 fonksiyon yazmışsınız gibi


eee böyle)))



UPD:

yapabilirsiniz, ancak şablondaki türler eşleşirse, işte bir örnek, düzgün çalışıyor:

Teşekkürler, rıhtımdakinden bile daha net) Şablondaki değişkenlerin önceden tanımlanmasının, onları belirtmemeyi mümkün kılmadığı ortaya çıktı. Bir dosyaya yazdırmam gerekiyor. Günlük, kayıtların bölünmesine izin vermez. Yazık ki 5 dergi yok.) Sonuç olarak, şablonlar, değişken tipini istenen türe atmamayı mümkün kılar, bu şablon işlevi içinde yapılabilir, ancak değişken sayısı tam olarak belirtilmelidir. İstenen türde önceden tanımlanmış değişkenlere sahip basit bir işlev, çağrıldığında daha az değişken belirtmeyi mümkün kılar, ancak değişken türleri istenen türe dönüştürülmelidir. Tabii bu arama yaparken de yapılabilir ama kayıt çok uzun.

 
Valerius :

Herkese iyi günler!

Durdurma kaybı değiştirme işlevi yaptı. Ancak çalışırken EURUSD,H1: OrderModify hatası 130 veriyor.

Üstelik fiyat, stop loss'un olması gereken yerden çok uzak.

işte fonksiyonun kendisi:


....
    err=OrderModify(OrderTicket(), OrderOpenPrice(), New_Stop ( NormalizeDouble (OrderOpenPrice()+spred*point, 
digits)), OrderProfit(), 0 , clrNONE ); // Цена открытия плюс спред может быть в зоне заморозки.
.....
.....
double New_Stop( double Parametr) // Проверка стоп-прик.
  {
   double Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL); // Миним. дистанция
   if (Parametr<Min_Dist) // Если меньше допуст.
     {
      Parametr=Min_Dist;                         // Установим допуст.
       Alert ( "Increased the distance of a stop order or the opening price of pending orders." );
     }
   return (Parametr);                             // Возврат значения
  }
 
Valerius :

Şu şekilde deneyin:


Teşekkürler, işe yaradı!

ama iki nokta daha:

1 MEVCUT haftanın Cuma günü açılan siparişlerin kapanmaması ve önceki haftaların Cuma günleri kapanmaması için sırasıyla hangi koşul eklenir?

2 kodun nasıl düzeltileceği - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);

"tür dönüşümü nedeniyle olası veri kaybı " uyarısını kaldırmak için? "...MarketInfo(nameSym,MODE_DIGITS))" bölümünde görmekle ilgilidir.

 
İyi akşamlar. En son kapatılan siparişi seçen kod nasıl görünmelidir. Gerçekten şöyle mi: " OrderSelect (OrdersHistoryTotal, SELECT_BY_POS, MODE_HISTORY"?
 
lotları toplama işlevinin dönüş değeri GetAmountLotFromOpenPos -1717986918 değerini verir nasıl düzeltilir?
 

Lütfen bana söyle.

Test cihazında GetAmountLotFromOpenPos lot toplama fonksiyonunun dönüş değeri -1717986918 değerini veriyor, nasıl düzeltebilirim?

 
Valeriy Yastremskiy :

Nedenini buldum. OrderModify'a OrderProft() değil, OrderTakeProfit() koymak gerekliydi. biraz baktı.

Yine de yardım için teşekkürler.

 
Yerkin Sagandykov :

Teşekkürler, işe yaradı!

ama iki nokta daha:

1 MEVCUT haftanın Cuma günü açılan siparişlerin kapanmaması ve önceki haftaların Cuma günleri kapanmaması için sırasıyla hangi koşul eklenir?

2 kodun nasıl düzeltileceği - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);

"tür dönüşümü nedeniyle olası veri kaybı " uyarısını kaldırmak için? "...MarketInfo(nameSym,MODE_DIGITS))" bölümünde görmekle ilgilidir.

İlk soru için aşağıdaki işlevi yapmanız gerekir:


for(int is=OrdersTotal()-1; is>=0; is--)
{
if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES))
{//Geçerli olmayan bir haftanın Cuma günü açılan kapanış siparişleri. Aynı zamanda bu hafta Cuma günü siparişleri kapatmıyoruz.
if(OrderMagicNumber()==Magic && TimeDayOfWeek(TimeCurrent())==5 && TimeDayOfWeek(OrderOpenTime())==5 && TimeDayOfYear(OrderOpenTime())<TimeDayOfYear(TimeCurrent()))
{
if (OrderType()==OP_BUY) sonuç=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_SELL) sonuç=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if(!result) {hata=GetLastError(); Print("LastError = ",hata, " ",Symbol()); }
başka {hata=0;}
başka
{Print("NoMagic ", OrderMagicNumber());} // Hata Ayıklama için
başka

{Print("Sipariş seçiminde hata oluştu ", GetLastError());}


İkinci soru için şöyle görünmelidir:

OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(MarketInfo(nameSym,MODE_ASK)), 3, clrNONE);

İyi şanlar.