KimIV'ten faydalı özellikler - sayfa 8

 

Evet sorular bitmek bilmiyor...
sürekli olarak ortaya çıkmaları anlamında, AMA koşullara göre.

Şu anda yayınlanan hiçbir fonksiyon yok, çünkü editörde "hissetmeden" bakıyorum.
Ayrıca, bunlara ek olarak, erken kodlar hakkında, özellikle sondaki yankılarla ilgili sorular var.
yukarıdakilerle: nasıl, neden fonksiyonlara geçilir, örneğin, sondaki bu kısım beni şaşırttı:

 //+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss ( double ldStopLoss ) {
  bool fm ;
  fm = OrderModify ( OrderTicket () , OrderOpenPrice () , ldStopLoss , OrderTakeProfit () , 0 , CLR_NONE ) ;
  if ( fm ) PlaySound ( " expert.wav " ) ;
}
ldStopLoss'un rolü belirsiz...
 

vay... :-) çok eski bir işlev. Önceden açılmış bir pozisyonun veya kurulu bir emrin durma seviyesini değiştirmek için tasarlanmıştır. Almak için de benzer bir işlev vardı. Her ikisi de daha gelişmiş ve daha işlevsel ModifyOrder() ile değiştirildi.

kombat :
ldStopLoss'un rolü belirsiz...

Bu, StopLoss'un ModifyStopLoss işlevine ayarlanması gereken fiyat seviyesini geçmek için kullanılan yerel bir değişkendir . Örneğin ModifyStopLoss fonksiyonunu şöyle çağıralım:

 ModifyStopLoss ( 1 , 5662 ) ;

Ardından yerel değişken ldStopLoss 1.5662 değerini alacaktır. Bu şu şekilde kontrol edilebilir:

 //+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss ( double ldStopLoss ) {
  bool fm ;
 
  Print ( " ldStopLoss= " , ldStopLoss ) ;
 
  fm = OrderModify ( OrderTicket () , OrderOpenPrice () , ldStopLoss , OrderTakeProfit () , 0 , CLR_NONE ) ;
  if ( fm ) PlaySound ( " expert.wav " ) ;
}

Günlükte aşağıdaki giriş olacaktır:

 <Время> <Эксперт> <Инструмент>,<таймфрейм>: ldStopLoss = 1.5662
 
KimIV :

vay... :-) çok eski bir işlev. Önceden açılmış bir pozisyonun veya kurulu bir emrin durma seviyesini değiştirmek için tasarlanmıştır. Almak için de benzer bir işlev vardı. Her ikisi de daha gelişmiş ve daha işlevsel ModifyOrder() ile değiştirildi.


Şey, yani... eskiler... (utanmış gibi :)))
Klasörlere göz gezdirdim, en eski dosya 22.01.2006 tarihli.
Ve görünüşe göre benim krivoruchkas ile seçici bile değil ...
İtiraf ediyorum, uzun zamandır basit şeyler yapıyorum, örneğin oradaki sayıları değiştirin.
Basit hesap makineleri, vb...

Her şey ticaret forumlarından birine danışman yazma isteğiyle başladı ama...
Ardından, grafikteki bilgileri görüntüleyen bir göstergeye ihtiyaç duyuldu ve ardından gitti ve gitti.
Şimdi bir uyuşturucu bağımlısı gibi bağımlıyım... ;) Neyim ben? kullanışlı... her şey orada... editör, vb., kompakt, taşınabilir.

Delfu 6'yı teslim etmek için ilk ve son girişimi hatırladığımda... bu yüzden titreyeceğim.
Şimdiye kadar, o disk çifti rafta toz topluyor ... :))) offtopik için üzgünüm .


Yani, () işlevinin parantezleri içinde ne var, ona belirli parametreleri iletmek için bir tür "biçim" mi?


Çünkü akıllara nedense tam tersi geldi: Bu, işlevin işleme sonucunda döndürdüğü parametredir .
Ayrıca fonksiyonun küme parantezleri içinde işlemek için parametreler alması gerçeği...{}

 void TrPos () {
if ( OrderType () == OP_BUY ) {
    if ( ( Bid - OrderOpenPrice ()) > TrailingStop * Point ) {
      if ( OrderStopLoss () < Bid - TrailingStop * Point ) {
        ModifyStopLoss ( Bid - TrailingStop * Point ) ;
        return ;
      }
    }
  }
// в качестве примера !!! просто выдраный кусок кода!

onlar. tüm bu Teklif, Puan vb. girdi parametreleridir.

Görünüşe göre çılgınca yanılmıştı ... ve parantezler () içinde olması, bir fonksiyona işlemek için parametreleri iletmenize izin veriyor,
aynı zamanda, işlevin kendisi, gerçek komut dosyası kodunun herhangi bir (veya başka) yerine yerleştirilebilir...

Böyle?

 
Soru şu: OpenPosition'dan farklı olarak neden ModifyOrder'da hata işleme yok? Değiştirirken, çeşitli hatalar da vardır. Tüm Hata İşleme Bloğu için Yükle, Değiştir ve Kapat işlevlerini ayrı ayrı ve ayrı olarak istiyorum - ve kod daha az ve yazması daha kolay ve daha hızlı çalışacak ... bir konuda yanılıyorsam - beni düzelt ..
 
İyi günler, Igor! Gerçek hayatta (Alpari DC) Uzman Danışmanlarınızı ve herhangi bir biçimde trol kullanan komut dosyalarınızı kullanırken sorunlar vardı. Özellikle e-Haber-Lucky$ (sistemim için ideal), e-TFL_v2, Set2StopOrders, e-SotTrailing ile ilgileniyorum. Demo üzerinde çalışıyorlar (ayrıca Alpari). Hata mesajları görüntülenmiyor. Ne olabilirdi? Ve bir soru daha. e-News-Lucky$'da herhangi bir zamanda giriş ve çıkış yapmak için zaman referansı nasıl kapatılır? Teşekkür ederim!
 
ag-forex писал (а):
İyi günler, Igor! Gerçek hayatta (Alpari DC) Uzman Danışmanlarınızı ve herhangi bir biçimde trol kullanan komut dosyalarınızı kullanırken sorunlar vardı. Özellikle e-Haber-Lucky$ (sistemim için ideal), e-TFL_v2, Set2StopOrders, e-SotTrailing ile ilgileniyorum. Demo üzerinde çalışıyorlar (ayrıca Alpari). Hata mesajları görüntülenmiyor. Ne olabilirdi?
Bu sorun, bu DC'nin teknik destek servisiyle iletişime geçilerek defalarca çözüldü.
 
kombat писал (а):
Yani, () işlevinin parantezleri içinde ne var, ona belirli parametreleri iletmek için bir tür "form" mu?

Şey, evet ... konteyner gibi bir şey :-)

kombat yazdı:
Çünkü akıllara nedense tam tersi geldi: Bu, işlevin işleme sonucunda döndürdüğü parametredir .

İşlevin döndürdüğü şey, dönüş değeridir. Basit bir örnek vereceğim. İki sayı ekleme işlevini tanımlarız:

 int f ( int a , int b ) {
  int x ;
  x = a + b ;
  return ( x ) ;
}

Yani, bu fonksiyonu şöyle çağırırsak:

 int y ;
y = f ( 3 , 5 ) ;

o zaman 3 ve 5 sayıları f fonksiyonunun parametreleridir. Sayılar, değişkenler, ifadeler fonksiyon parametreleri olarak hareket edebilir. a ve b değişkenleri parametre değerlerini alıp fonksiyona veren yerel değişkenlerdir . x değişkeni f fonksiyonunun dönüş değeridir, yani f fonksiyonuna yaptığımız çağrıdan sonra y değişkeni x değişkeninin kendisine ilettiği değeri yani 8 değerini alacaktır.

savaş :

Ayrıca fonksiyonun küme parantezleri içinde işlemek için parametreler alması gerçeği...{}

 void TrPos () {
if ( OrderType () == OP_BUY ) {
    if ( ( Bid - OrderOpenPrice ()) > TrailingStop * Point ) {
      if ( OrderStopLoss () < Bid - TrailingStop * Point ) {
        ModifyStopLoss ( Bid - TrailingStop * Point ) ;
        return ;
      }
    }
  }
// в качестве примера !!! просто выдраный кусок кода!

onlar. tüm bu Teklif, Puan vb. girdi parametreleridir.

hayır... ModifyStopLoss işlevinin parametresi, Bid-TrailingStop*Point ifadesinin değeri olacaktır.

savaş :

Görünüşe göre çılgınca yanılmıştı ... ve parantezler () içinde olması, bir fonksiyona işlemek için parametreleri iletmenize izin veriyor,
aynı zamanda, işlevin kendisi, gerçek komut dosyası kodunun herhangi bir (veya başka) yerine yerleştirilebilir...

Böyle?

Evet

 
sasa999 :
Soru şu: OpenPosition'ın aksine neden ModifyOrder'da hata işleme yok?

Yolun kurallarının kanla yazıldığını söylerler deyimini bir yerde duymuştum. Ve içlerinde ekstra bir şey yok. Her kelimenin arkasında neredeyse bir kazada kaybedilen birinin hayatı var.

Deneyimlerime göre işlevlerimi yazıyorum ve onlara uygulamamda meydana gelen hataların işlenmesini dahil ediyorum ve bu işlemden vazgeçilemez. Pazara girmeye çalışırken gösterdiğim maksimum "kibarlık" (hata işleme) . Değişiklik sırasında çoğu hata, fiyat normalleştirmesi ve basit değer kontrolleri ile ortadan kaldırılır. Değişikliğin kendisi sırasında bir hata meydana gelirse, bir sonraki tikte değişiklik zaten normal şekilde ilerler. Kapanışta da aynı şey.

 

pp - emir açılış fiyatının bu fonksiyona geçirilmesinin amacı nedir?

 void ModifyOrder ( double pp =- 1 , double sl = 0 , double tp = 0 , color cl = CLR_NONE )

renk de en başında bildiriliyor... test_ModifyOrder.mq4 (12.14 KB) ..neden kullanmıyorsunuz, ancak işleve yeniden gönderiyorsunuz

 color clModifyBuy = Aqua ; // Цвет значка модификации покупки
color clModifySell = Tomato ; // Цвет значка модификации продажи
avantajı nedir
 int dg = MarketInfo ( OrderSymbol () , MODE_DIGITS ) , er , it ;
pp = NormalizeDouble ( pp , dg ) ;

kısa formdan önce

 pp = NormalizeDouble ( pp , Digits ) ;

OrderOpenPrice () işlevini neden normalleştirmemiz gerekiyor? arama emrindekiyle aynı formatta değil mi?

 op = NormalizeDouble ( OrderOpenPrice () , dg ) ;
Şimdiye kadar, aynı şeyi değişiklik sırasında geri eklersem herhangi bir hata fark etmedim. OrderStopLoss() ve OrderTakeProfit() ile aynı
 
sasa999 :

pp - emir açılış fiyatının bu fonksiyona geçirilmesinin amacı nedir?

 void ModifyOrder ( double pp =- 1 , double sl = 0 , double tp = 0 , color cl = CLR_NONE )

OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT ve OP_SELSTOP siparişlerini taşımak amacıyla.

sasa999 :

renk de en başında bildiriliyor... test_ModifyOrder.mq4 (12.14 KB) ..neden kullanmıyorsunuz ama tekrar işleve gönderiyorsunuz

 color clModifyBuy = Aqua ; // Цвет значка модификации покупки
color clModifySell = Tomato ; // Цвет значка модификации продажи

Teşekkür ederim! Kullanacağım!

sasa999 :
avantajı nedir
 int dg = MarketInfo ( OrderSymbol () , MODE_DIGITS ) , er , it ;
pp = NormalizeDouble ( pp , dg ) ;

kısa formdan önce

 pp = NormalizeDouble ( pp , Digits ) ;

danışmanın sadece mevcut enstrümanın değil, diğerlerinin de pozisyonları ve emirleriyle çalışmasına izin veren evrensellikte. Örneğin, danışman EURUSD grafiği üzerinde çalışır. Rakamlar seçeneği USDJPY'de açılan pozisyonlarla çalışmanıza izin vermeyecektir.

sasa999 :

OrderOpenPrice () işlevini neden normalleştirmemiz gerekiyor? arama emrindekiyle aynı formatta değil mi?

 op = NormalizeDouble ( OrderOpenPrice () , dg ) ;

Çift değerleri başarıyla karşılaştırmak için. Normalleştirmezseniz, karşılaştıramazsınız veya daha doğrusu anlamsızdır.

sasa999 :
Değişiklik sırasında aynı şey geri takılmışsa hatayı fark etmedim. OrderStopLoss() ve OrderTakeProfit() ile aynı
Normalleştirme olmadan, fonksiyonda 1 numaralı hatalar oluşur ( OrderModify zaten ayarlanmış değerleri aynı değerlerle değiştirmeye çalışır.)