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

 

Lütfen bu işlevi tersine çevirmeme yardım edin:

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 11.09.2008                                                     |
//|  Описание : Перенос уровня стопа в безубыток                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//|    Кроме того, функция MovingInWL() предполагает наличие глобальных переменных (внешних параметров скрипта или советника):
//|    int LevelProfit - Уровень профита в пунктах, которого должна достигнуть позиция для того, чтобы её стоп был перенесён на уровень безубытка.
//|    int LevelWLoss - Уровень безубытка в пунктах, на который будет перенесён стоп позиции после того, как её профит достигнет уровня LevelProfit в пунктах.
//+----------------------------------------------------------------------------+
void MovingInWL( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double po, pp;
   int     i, k= OrdersTotal ();

   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
      po= MarketInfo ( OrderSymbol (), MODE_POINT);
       if ( OrderType ()==OP_BUY) {
         if ( OrderStopLoss ()- OrderOpenPrice ()<LevelWLoss*po) {
          pp= MarketInfo ( OrderSymbol (), MODE_BID);
           if (pp- OrderOpenPrice ()>LevelProfit*po) {
            ModifyOrder(- 1 , OrderOpenPrice ()+LevelWLoss*po, - 1 );
          }
        }
      }
       if ( OrderType ()==OP_SELL) {
         if ( OrderStopLoss ()== 0 || OrderOpenPrice ()- OrderStopLoss ()<LevelWLoss*po) {
          pp= MarketInfo ( OrderSymbol (), MODE_ASK);
           if ( OrderOpenPrice ()-pp>LevelProfit*po) {
            ModifyOrder(- 1 , OrderOpenPrice ()-LevelWLoss*po, - 1 );
          }
        }
      }
    }
  }
}

yani, fiyat, LevelProfit puanlarının sayısı kadar açık bir siparişten zarara girerse (buna LevelLoss diyebilirsiniz), duruma bağlı olarak, kârı sıfıra veya 1 puan 2 zarara vb. aktarmanız gerekir. LevelWLoss parametresine ne yazılmalıdır, böylece fiyat tersine dönerse kar olmaz. Ya da hazır olan var mı?

Şimdiden teşekkür ederim))

 

Güzel gün! Biliyorsunuz, kodu danışmanın init bölümünden kestim (hafta sonu için hata ayıkladım - kene yok!), Başa taşıdım. Dış ön döngü kaldırıldı. Derlenmiş.

Azarlanmış-- 'devam' - 'ara' veya 'devam' sadece bazı döngülerde kullanılır C:\Alpari\experts\Weekend.mq4 (69, 20)

Neyle ilgili? Peki, sürekli bir döngüde, bir döngüde, ne olmuş yani? İngilizcem pek iyi değil.. Bazı kelimeleri anlarsam, bir anlam yığını oluşturamam!

 if (strela1 < strela2)
    { Sleep ( 600 );
         if (SELL > 0 ) udalenie (OP_SELL); Sleep ( 600 );
         if (BUY == 0 )
        { Sleep ( 600 ); RefreshRates ();
           OrderSend ( Symbol ( ), OP_SELL, lot, NormalizeDouble (Bid, Digits ), 5 , NormalizeDouble ( Ask+ (stoplos* Point ), Digits ),   NormalizeDouble ( Ask-( takeprofit* Point ), Digits ), NULL , magicnumber, 0 , CLR_NONE ) ;            
           int Error= GetLastError (); 
           Sleep ( 600 );
     if (Error== 129 ) continue ;    }
    
    
    }
     else if (strela1 > strela2)
    { Sleep ( 600 );
         if (BUY > 0 ) udalenie (OP_BUY); Sleep ( 600 );
         if (SELL == 0 )
        { Sleep ( 600 ); RefreshRates ();
             OrderSend ( Symbol ( ), OP_BUY, lot, NormalizeDouble (Ask, Digits ), 5 , NormalizeDouble ( Bid- (stoplos* Point ), Digits ),   NormalizeDouble ( Ask+( takeprofit* Point ), Digits ), NULL , magicnumber, 0 , CLR_NONE ); 
            
           Error= GetLastError (); 
         if (Error== 129 ) continue ;  }
 
Dimka-novitsek :

Güzel gün! Biliyorsunuz, kodu danışmanın init bölümünden kestim (hafta sonu için hata ayıkladım - kene yok!), Başa taşıdım. Dış ön döngü kaldırıldı. Derlenmiş.

Lanetli-- 'continue' - 'break' veya 'devam' sadece bazı döngülerde kullanılır C:\Alpari\experts\Weekend.mq4 (69, 20)

Neyle ilgili? Peki, sürekli bir döngüde, bir döngüde, ne olmuş yani? İngilizcem pek iyi değil.. Bazı kelimeleri anlarsam, bir anlam yığını oluşturamam!

bir döngünüz yok, ancak devam ifadesi duruyor (yalnızca döngülerde kullanılır).
 
Lians :

Lütfen bu işlevi tersine çevirmeme yardım edin:

yani, fiyat, LevelProfit puanlarının sayısı kadar açık bir siparişten zarara girerse (buna LevelLoss diyebilirsiniz), duruma bağlı olarak, kârı sıfıra veya 1 puan 2 zarara vb. aktarmanız gerekir. LevelWLoss parametresine ne yazılmalıdır, böylece fiyat tersine dönerse kar olmaz. Ya da hazır olan var mı?

Şimdiden teşekkür ederim))

İşlev şöyle olabilir:

 void fMoving_TPInBU ( int fi_LevelLOSS,       // уровень Лосса в пп. (для цены) - ТОЛЬКО > 0
                     int fi_LevelBU,         // уровень БУ в пп. (для тэйкпрофита) - может быть и >= 0 и < 0
                     string fs_Symbol = "" ,   // Symbol
                     int fi_Type = - 1 ,       // Type
                     int gi_MG = - 1 )         // MagicNumber
{
     double ld_Point, ld_Price;
     int     li_Type, li_cnt, li_total = OrdersTotal ();
//----
     if (li_total == 0 ) return ;
     if (fs_Symbol == "" || fs_Symbol == "0" ) fs_Symbol = Symbol ();
     for ( int li_pos = li_total - 1 ; li_pos >= 0 ; li_pos--)
    {
         if (! OrderSelect (li_pos, SELECT_BY_POS, MODE_TRADES)) continue ;
         if ( OrderSymbol () != fs_Symbol) continue ;
         if (gi_MG > -1) if (gi_MG != OrderMagicNumber ()) continue ;
        li_Type = OrderType ();
         if (li_Type > 1 ) continue ;
         if (li_Type > -1) if (li_Type != fi_Type) continue ;
         RefreshRates ();
         if (li_Type == 0 ) {li_cnt = 1 ; ld_Price = MarketInfo (fs_Symbol, MODE_BID);}
         else {li_cnt = - 1 ; ld_Price = MarketInfo (fs_Symbol, MODE_ASK);}
        ld_Point = MarketInfo ( OrderSymbol (), MODE_POINT);
         if (li_cnt * ( OrderOpenPrice () - ld_Price) >= fi_LevelLOSS * ld_Point)
        {
             double ld_TP = NormalizeDouble ( OrderOpenPrice () + li_cnt * fi_LevelBU * ld_Point, MarketInfo (fs_Symbol, MODE_DIGITS));
             //---- Проверка на "излишнюю" модификацию
             if (ld_TP - OrderTakeProfit () != 0.0 )
            { OrderModify ( OrderTicket (), ld_Price, OrderStopLoss (), ld_TP, 0);}
        }
    }
//----
}

STOP'ları değiştirirken MODE_STOPLEVEL ve MODE_FREEZELEVEL kısıtlamalarını kontrol etmeyi unutmayın.

 

Teşekkürler!! çok çabuk göreceğim..

Nasıl olmaz? Ve eğer (SATIN AL == 0) - bu bir döngü değil mi? Garip bir şekilde, başlangıçta tüm programın etrafına parantez içine alınmış en dıştaki döngüyü kaldırdım. Hata ayıklama için gerekliydi ve kaldırdım.

Burada ve orada değilse, if (strela1 < strela2) geçmesine izin verin, programın mantığı ihlal edilmeyecektir.

 
Dimka-novitsek :

Teşekkürler!! çok çabuk göreceğim..

Nasıl olmaz? Ve eğer (SATIN AL == 0) - bu bir döngü değil mi? Garip bir şekilde, başlangıçta tüm programın etrafına parantez içine alınmış en dıştaki döngüyü kaldırdım.


Numara. Bir döngü değil. Geriye kalması gerekeni aldın. Ders kitabının tamamını okuyun! Özellikle burada: "Bir koşullu deyimde bileşik deyim kullanımına bir örnek. Önce if(ifade) koşul deyimi gelir, ardından bileşik deyim. Bileşik deyim yürütülebilir deyimlerin bir listesini içerir."

 
Okuyorum.
 
YARDIM Lütfen yardım edin !! Örnek olarak bu şekli ekliyorum. Ben programcı değilim, bir şekilde bu göstergeyi lehimledim ama sonra bilgi ve beceri eksikliği ile karşılaştım, bir hafta boyunca okları ekranda göstermeye çalıştım, hiçbir şey olmadı. histogramın göstergeleri ile fiyat çizgisi arasındaki tutarsızlıklardır.Şekilde, örneğin, bu yerleri 1-2-3-4 ile işaretledim.üzerinde tabanı görüyoruz, fiyat düşük güncellendi ve dip kapanışta histogram da büyüyor ama çizgide azalma var.İhtiyacımız olan nokta bu.Programcılar arasında ilgilenen varsa yardım etsin.
Dosyalar:
tjllfe2.zip  45 kb
 

TarasBY , açıklamalar ve özellik için teşekkürler!

İşlevi koleksiyonuma alıyorum, ancak bir şey net değil:

fi_LevelBU parametresi, eksi varsa, almanın zarara, artı ise kâra mı yoksa tam tersi mi?

İkincisi: işlevin kendisindeki kısıtlamaları kontrol etmek mi yoksa işlevin dışında mı yapmak daha iyidir?

 
Lians :

TarasBY , açıklamalar ve özellik için teşekkürler!

İşlevi koleksiyonuma alıyorum, ancak bir şey net değil:

fi_LevelBU parametresi, eksi varsa, almanın zarara, artı ise kâra mı yoksa tam tersi mi?

Doğru (tersi değil).

Yalanlar :

İkincisi: işlevin kendisindeki kısıtlamaları kontrol etmek mi yoksa işlevin dışında mı yapmak daha iyidir?

Herkes kendisi için karar verir. Kendime ticaret emirlerinin yürütülmesinden sorumlu ve tüm kısıtlamaların kontrolünü kontrol eden bir kitaplık yaptım.

Not: İşlev kodunda küçük bir hata oluştu (ek bir parantez) - düzeltildi.