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

 
PolarSeaman :

Bu özel konumun tarihinde bir bölümün kapalı olduğunu nasıl öğrenebilirim?

1,0 lotu ile bir pozisyon açılıyor , 0,5$ kayıpla 0,5 kapatılıyor, daha sonra 0,25'i 5$ karla kapatılıyor.Kar 50$ olunca her şeyi kapatacağım. Aslında, şimdi, kâr 50 dolar.

Mevcut karı hesaplarken kapalı -10$ ve +5$'ı nasıl dikkate alabilirim? 55$ karla kapatmak

Konum yorumuna bakın (mql4'te) - kapalı kısımda kalanın bileti olacak (#1234556789), kalan kısımda kapalı olanın bileti olacak (#123456788'den) - Nerede olduğunu hatırlamıyorum boşluklar - kendiniz göreceksiniz

 
Artyom Trishkin :

Konum yorumuna bakın (mql4'te) - kapalı kısımda kalanın bileti olacak (#1234556789), kalan kısımda kapalı olanın bileti olacak (#123456788'den) - Nerede olduğunu hatırlamıyorum boşluklar - kendiniz göreceksiniz

Kapalı bir pozisyonun yorumunu açık bir pozisyonun biletiyle karşılaştırırım, "0.0" döndürür

 double prof_cl_pos( string sy= "0" , int op=- 1 , int mn=- 1 ) {
   datetime ta;
   int       i, k= OrdersHistoryTotal ();
   double profit_= 0 ;
   string comment= "" ;

   if (sy== "" || sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderSymbol ()==sy) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
             // comment=OrderComment();
               if (ticket_op_pos( Symbol (), - 1 ,mn)== OrderComment ())
              profit_= OrderProfit ();
            }
          }
        }
      }
    }
  }
   return (profit_);
}
   int ticket_op_pos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime o;
   double    l=- 1 ;
   string comment= "" ;
   int      ticket, i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
                ticket= OrderTicket ();
              }
            }
          }
        }
      }
    }

   return (ticket);
}
 
PolarSeaman :

Kapalı bir pozisyonun yorumunu açık bir pozisyonun biletiyle karşılaştırırım, "0.0" döndürür

Yorumdan bir bilet seçmeniz gerekir, yani "#'dan" ve "#'ye" gibi fazladan karakterleri kaldırmanız gerekir. Bu burada yapılmaz.

 
Ihor Herasko :

Yorumdan bir bilet seçmeniz gerekir, yani "#'dan" ve "#'ye" gibi fazladan karakterleri kaldırmanız gerekir. Bu burada yapılmaz.

Aynen öyle! ve "#'a" nasıl kesilir?
 
PolarSeaman :
Aynen öyle! ve "#'a" nasıl kesilir?
# karakterinin/alt dizesinin bir oluşumunu bulun ve (isteğe bağlı olarak) ondan önce "from" veya "to" olduğundan emin olun

gerisini al ve uzuna çevir

5e'de ilkel regexp var - onlarla daha kolay olacak

 
Maxim Kuznetsov :
karakter/alt dizenin oluşumunu bulun #
Ne bulmalı?
 
PolarSeaman :
Ne bulmalı?

Site araması çalışmıyor mu? Sayfanın üst kısmında herhangi bir belgeniz var mı?

Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
[in]  Длина извлекаемой подстроки. Если значение параметра равно -1 либо параметр не задан, то будет извлекаться подстрока, начиная с указанной позиции и до конца строки.
 
Artyom Trishkin :

Site araması çalışmıyor mu? Sayfanın üst kısmında belge var mı?

teşekkür ederim öyle yaptım

              comment= OrderComment ();
               substr = StringSubstr (comment, 4 , 9 );//пропускаю " to #" беру цифры
               if (ticket_op_pos( Symbol (), - 1 ,mn)==substr)

ancak geçmiş arama işlevi , açık bir pozisyon için mevcut karı döndürmeye başladı

 double prof_cl_pos( string sy= "0" , int op=- 1 , int mn=- 1 ) {
   datetime ta;
   int       i, k= OrdersHistoryTotal ();
   double profit_= 0 ;
   string comment= "" ;
   string substr= "" ;

   if (sy== "" || sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderSymbol ()==sy) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
              comment= OrderComment ();
               substr = StringSubstr (comment, 4 , 9 );
               if (ticket_op_pos( Symbol (), - 1 ,mn)==substr)
              profit_= OrderProfit ();
            }
          }
        }
      }
    }
  }
   return (profit_);
}
 

> Bunu yaptığınız için teşekkürler

bunu bir daha yapma :-) tanımsız dizelerle çalışırken, uzunluklarına veya parçanın başlangıcına güvenemezsiniz

harika bir işlev var StringFind() - "#" veya hemen "#" dizesinin oluşumunu arayın

ps/ yorumlar yine de bir harfe dönüştürülmelidir - büyük veya küçük harf. Ne yazık ki yorumlarda etiketleme protokolü yok, bu nedenle bazı sunucuların "FROM #" (büyük harflerle) demesi mümkündür;
özellikle, bazıları [sl] ve bazıları (sl)'yi yorumun sonuna stop loss ile koyar. Ve bu arada, yorumların boyutu sınırlıdır. Ve diğer-diğer.
 

Böyle bir tasarımın nesi yanlış?

 datetime tm1 = D'09.04.2018' ;
long      tm2 = TimeCurrent ();

 if (tm1 > tm2) Print ( "Работает" );

Yoksa tarih saatini yayınlamak daha mı iyi? uzun yazmak için?