Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 75

 
MisterD :
Tekrar merhaba, lütfen aşağıdaki koddaki hatanın nerede olduğunu söyler misiniz?
Şu anda döngüye "deinit" diyorum
Sonuncusu hariç tüm siparişler silinir.
Hatanın büyük olasılıkla bu satırda olduğunu anlıyorum >> for (int i=1; i<=OrdersTotal(); i++) <<
Ancak, mantıksal olarak, her şey doğru görünüyor ... neyi kaçırdım?
Şimdiden teşekkürler!


Ters çevrim

 //-------------------------------------------------------------------------------------------
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
   if ( OrderSelect (i,SELECT_BY_POS)== true )
   {
       int Type=OrderType();
       if (OrderSymbol()!= Symbol () || Type < 2 ) continue ;
       int Ticket=OrderTicket();
       bool Modify =OrderDelete(Ticket);
       if (Modify == true ) Alert ( "Ордер Удалён" ); continue ;
       if (Modify != true ) Alert ( "Удаление ордера не удалась" );
   }
} 
//-------------------------------------------------------------------------------------------
 
MisterD :
Tekrar merhaba, lütfen aşağıdaki koddaki hatanın nerede olduğunu söyler misiniz?
Şu anda döngüye "deinit" diyorum
Sonuncusu hariç tüm siparişler silinir.
Hatanın büyük olasılıkla bu satırda olduğunu anlıyorum >> for (int i=1; i<=OrdersTotal(); i++) <<
Ancak, her şey mantıksal olarak doğru görünüyor ... neyi kaçırdım?
Şimdiden teşekkürler!

//------------------------------------------------ -------------------------------------------------
(int i=1; i<=SiparişToplam(); i++) için
{
if (OrderSelect(i-1,SELECT_BY_POS)==true)
{
intType=OrderType();
if (OrderSymbol()!= Symbol() || Type <2)continue;
int Bilet=OrderTicket();
bool Değiştir =SiparişSil(Bilet);
if (Modify == true) Alert ("Sipariş Silindi");devam;
if (Modify != true) Alert ("Sipariş silinemedi");
devam etmek;
}
}
//------------------------------------------------ -------------------------------------------------


Şu şekilde deneyin:

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) {
   if ( OrderSelect (i,......................
 

tünaydın. Biraz yardıma ihtiyacım var, kar açısından en şişman partilerden birini kapatan bir fonksiyon var.

bu konuyu kapatman gerek

ve bana nasıl kullanılacağını söyleyin lütfen, örneğin, hesap öz sermayesi 5 puandan fazlaysa, işlev çalışmalıdır.

 void ClosePosWithMaxProfitInCurrency( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double pr= 0 ;
   int     i, k= OrdersTotal (), np=- 1 ;

   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (mn< 0 || OrderMagicNumber()==mn) {
           if (pr<OrderProfit()+OrderSwap()) {
            pr=OrderProfit()+OrderSwap();
            np=i;
          }
        }
      }
    }
  }
   if (np>= 0 ) {
     if ( OrderSelect (np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();
    }
  } 

}

 
sannin :

tünaydın. Biraz yardıma ihtiyacım var, kar açısından en şişman partilerden birini kapatan bir fonksiyon var.

bu konuyu kapatman gerek

ve bana nasıl kullanılacağını söyleyin lütfen, örneğin, hesap öz sermayesi 5 puandan fazlaysa, işlev çalışmalıdır.

5 puan (4 işaret için) - gerçek piyasada 3-4'ten fazla emir ile (silme sonuçlarına göre) kolayca eksiye dönüşecektir. :)))

PS Anladığım kadarıyla, hazır bir koda ihtiyacınız var, ancak böyle bir sorunu çözmek için algoritma sizin için işe yaramaz mı?!

 
TarasBY :
5 puan (4 işaret için) - 3-4'ten fazla siparişin olduğu gerçek piyasada, (silme sonuçlarına göre) kolayca eksiye dönüşecektir. :)))


mesela ben .. evet ve son zamanlarda altına dikkat ettim .. düşündüğüm kadar hızlı tepki vermiyor

Henüz bu formdaki fonksiyonlarla çalışmadım .. bu yüzden destek istiyorum

 
İyi günler, danışmanın geliştirilmesinde bir sorun oluştu, koşullar gösterge tarafından kapatıldığını gösterse de siparişleri kapatmıyor, lütfen neyin yanlış olduğunu açıklayın, şimdiden teşekkürler
Dosyalar:
 
sannin :


mesela ben .. evet ve son zamanlarda altına dikkat ettim .. düşündüğüm kadar hızlı tepki vermiyor

Henüz bu formdaki fonksiyonlarla çalışmadım .. bu yüzden destek istiyorum

İlk olarak, enstrüman için toplam pozisyonun BU satırını hesaplayın (bu, puan cinsinden kârlılığa ulaşıldığında siparişleri kapatma koşullarını belirlemek içindir):

 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Определение Уровня БезУбытка по символу                                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_BreakEven ( string fs_Symbol,     // Symbol
                       double fd_DeltaLots,   // разность объемов ордеров Buy и Sell
                       double fd_Profit)     // текущий профит по открытым ордера
{
     if (fd_DeltaLots == 0 .) return ( 0 .);
     double ld_BU = 0 ., ld_tickvalue = MarketInfo (fs_Symbol, MODE_TICKVALUE);   // цена одного пункта
//----
     //---- Уровень общего безубытка для открытых ордеров
     if (fd_DeltaLots > 0 .) ld_BU = MarketInfo (fs_Symbol, MODE_BID) - (fd_Profit / (ld_tickvalue * fd_DeltaLots)) * MarketInfo (fs_Symbol, MODE_POINT);
     else if (fd_DeltaLots < 0 .) ld_BU = MarketInfo (fs_Symbol, MODE_ASK) - (fd_Profit / (ld_tickvalue * fd_DeltaLots)) * MarketInfo (fs_Symbol, MODE_POINT);
//----
     return (ld_BU);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

Ardından cari fiyat ile Başabaş satırı arasındaki farkı hesaplayın, eğer "fark uygunsa" emir silme prosedürüne geçiyoruz. İlk olarak, en karlı / kaybeden siparişin Bileti için arama işlevi:

 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//         Получаем Тикет самого прибыльного/убыточного ордера                        |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_TicketWithControlProfit ( string fs_Symbol = "" ,   // Инструмент
                                  int fi_Magic = - 1 ,       // Magic
                                   int fi_Type = - 1 ,       // OrderType
                                  int fi_TypeProfit = 0 )   // Профитность ордера среди остальных ордеров:
                                                          // >= 0 -  с самым большим профитом;
                                                          // < 0 - самый убыточный
{
     double ld_Profit = 0 ., ld_curProfit;
     int     li_Total = OrdersTotal (), li_Ticket = - 1 ;
//----
     if (fs_Symbol == "" ) fs_Symbol = Symbol ();
    if (fi_TypeProfit < 0 ) ld_Profit = 10000000000. ;
     for ( int i = li_Total - 1 ; i >= 0 ; i--)
    {
         if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
         if (OrderSymbol() != fs_Symbol) continue ;
         if (fi_Magic > - 1 ) if (OrderMagicNumber() != fi_Magic) continue ;
        if (fi_Type > - 1 ) if (OrderType() != fi_Type) continue ;
        if (fi_Type > 1 ) continue ;
        ld_curProfit = OrderProfit() + OrderSwap() + OrderCommission();
         if (fi_TypeProfit >= 0 ) { if (ld_Profit <= ld_curProfit) continue ;}
        else if (ld_Profit >= ld_curProfit) continue ;
        ld_Profit = ld_curProfit;
        li_Ticket = OrderTicket();
    }
//----
     return (li_Ticket);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

Kaldırma her iki yönde de düzenlenebilir. Silmek:

 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция закрытия "своих" ордеров по признаку                               |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fClose_AllOrdersByProfit ( string fs_Symbol = "" ,   // Инструмент
                              int fi_Magic = - 1 ,       // Magic
                               int fi_Type = - 1 ,       // OrderType
                              int fi_TypeProfit = 0 )   // Направление закрытия ордеро по профитности:
                                                      // >= 0 - начиная от самого большого профита;
                                                      // < 0 - начиная от самого маленького профита;
{
     int li_Ticket = fGet_TicketWithControlProfit (fs_Symbol, fi_Magic, fi_Type, fi_TypeProfit),
        li_cnt = 0 ;
//----
     while (li_Ticket > 0 )
    {
         //---- Здесь вставите свою процедуру закрытия 
         //---- что-то типа:
         //ClosePosByTicket (li_Ticket);
         li_Ticket = fGet_TicketWithControlProfit (fs_Symbol, fi_Magic, fi_Type, fi_TypeProfit);
         li_cnt++;
    }
//----
     return (li_cnt);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

Gerekli birimi daha fazla monte etmek zor değil: ustalaşmanız veya işe gitmeniz gerekiyor ... :)

 
Bir değişkene fiyat değeri atamak istiyorum.

a=( NormalizeDouble (OrderOpenPrice(), 5 ));


ama nedense fiyat dört haneli olarak 1.3360 euro olarak çizilmiştir.

bir hata önerir misiniz?
 
lottamer :
Bir değişkene fiyat değeri atamak istiyorum.



ama nedense fiyat dört haneli olarak 1.3360 euro olarak çizilmiştir.

bir hata önerir misiniz?

Belki DC dört hanelidir? Veya DoubleToStr(YourPrice,5) olmadan fiyatı görüntüleyin
 
Sepulca :

Belki DC dört hanelidir? Veya DoubleToStr(YourPrice,5) olmadan fiyatı görüntüleyin


DC beş haneli...

DoubleToStr(YourPrice,5) OLMADAN ne anlama geliyor? Hiçbir yerde DoubleToStr(YourPrice,5) yoktu