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

 
Artyom Trishkin :

Sipariş biletini okuyabilirsiniz.

benzer bir işlev var mı

 OrderGetTicket ();

mql4 için mi?

 
Seric29 :

benzer bir işlev var mı

mql4 için mi?

Var ama tam olarak öyle değil. Bir sipariş seçtikten sonra, diğer fonksiyonları kullanarak sipariş türünü ve bileti belirlemeniz gerekir.

OrderSelect - Торговые функции - Справочник MQL4
OrderSelect - Торговые функции - Справочник MQL4
  • docs.mql4.com
Чтобы определить, из какого списка выбран ордер, необходимо проанализировать его время закрытия. Если время закрытия ордера равно 0, то ордер является открытым или отложенным и взят из списка открытых ордеров терминала. Отличить открытый ордер от отложенного ордера можно по типу ордера. Если время закрытия ордера не равно 0, то ордер является...
 

Tünaydın.

Partide i kadar bir artışla bir mevduat ızgarası açma işlevi vardır,

Izgaranın (partilerin) martin'e göre yapılması gereklidir, yani. lot1=0.01, lot2=0.02, lot3=lot2+lot1. ,

fLots() işlevinde nasıl açıklanır?

extern int Count       = 4 ;       //Количество устанавливаемых ордеров
\\


for (i= 1 ;i<=Count;i++)
    {
     {         
      res= OrderSend ( Symbol (),OP_BUYLIMIT,fLots()*i,fND(Ask-(Distance* Point +i*Step* Point )), 3 ,fND(BuyPrice-StopLoss* Point ), fND(Ask-(Distance* Point +i*Step* Point ))+TakeProfit* Point , "" ,MAGIC,expiration,Blue);    
  
       Sleep ( 3000 );
       if (res< 0 ) 
         {
             Print ( "ОШИБКА: " , GetLastError ()); 
         } else {
            RefreshRates();
         }    
     }
    }
 

onInit içinde açık pozisyon olup olmadığını kontrol etmek istiyorum, ancak bir nedenden dolayı seçemiyorum:


   for ( int i= PositionsTotal (); i> 0 ; i--)
      {
      smbol = PositionSelect ( PositionGetSymbol (i));
      tickett = PositionGetTicket (i);
      
       Print ( "ticket(" ,i, ") = " , tickett);
       Print (smbol);

      }
   Print ( "Position Total = " , PositionsTotal ());

Alırım:


2019.05.01 00:11:32.177 başabaş (GBPUSD,H1) bilet(1) = 0

2019.05.01 00:11:32.177 başabaş (GBPUSD,H1) yanlış

2019.05.01 00:11:32.177 başabaş (GBPUSD,H1) Pozisyon Toplamı = 1



 
psyman :

onInit içinde açık pozisyon olup olmadığını kontrol etmek istiyorum, ancak bir nedenden dolayı seçemiyorum:


Alırım:


2019.05.01 00:11:32.177 başabaş (GBPUSD,H1) bilet(1) = 0

2019.05.01 00:11:32.177 başabaş (GBPUSD,H1) yanlış

2019.05.01 00:11:32.177 başabaş (GBPUSD,H1) Pozisyon Toplamı = 1



Hemen gözüme çarpan:

 for ( int i= PositionsTotal (); i> 0 ; i--)

Daha fazla bakmadım çünkü ters döngüde şöyle olmalı:

 for ( int i= PositionsTotal ()-1; i>= 0 ; i--)
 
Artyom Trishkin :

Hemen gözüme takılan:

Daha fazla bakmadım çünkü ters döngüde şöyle olmalı:

Ve bu gönderiyi daha çok beğendim.

 for ( int i = PositionsTotal (); i-- > 0 ;)
 
Alexey Viktorov :

Ve bu gönderiyi daha çok beğendim.

Şey... Yeni başlayanlara uygun bir tane gösterdim ;)

 

//+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия   : 19.02.2008                                                     | //|  Описание : Возвращает суммарный профит в валюте депозита                  | //|             закрытых с определённой даты позиций                           | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента             (""   - любой символ,         | //|                                               NULL - текущий символ)       | //|    op - операция                             (-1   - любая позиция)        | //|    mn - MagicNumber                          (-1   - любой магик)          | //|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     | //+----------------------------------------------------------------------------+ double GetProfitFromDateInCurrency( string sy= "" , int op=- 1 , int mn=- 1 , datetime dt= 0 ) {    double p= 0 ;    int     i, k=OrdersHistoryTotal();    if (sy== "0" ) sy= Symbol ();    for (i= 0 ; i<k; i++) {      if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {        if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {          if (OrderType()==OP_BUY || OrderType()==OP_SELL) {            if (mn< 0 || OrderMagicNumber()==mn) {              if (dt<OrderCloseTime()) {               p+=OrderProfit()+OrderCommission()+OrderSwap();             }           }         }       }     }   }    return (p); } // код Кима изменил на это и теперь от считает профит за сегодня и обнуляется в полночь double GetProfitFromDateInCurrency1( string sy= "0" , int op=- 1 , int mn=- 1 ) {    double p= 0 ;    int     i, k=OrdersHistoryTotal();    datetime dt=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE ));    if (sy== "0" ) sy= Symbol ();    for (i= 0 ; i<k; i++) {      if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {        if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {          if (OrderType()==OP_BUY || OrderType()==OP_SELL) {            if (mn< 0 || OrderMagicNumber()==mn) {              if (dt<OrderCloseTime()) {               p+=OrderProfit()+OrderCommission()+OrderSwap();             }           }         }       }     }   }    return (p); }

Merhaba. Lütfen dün, dünden önceki gün, vb. kapatılan işlemlerden elde edilen karı hesaplama işlevine yardımcı olun. Bugün için Kar yapmak istiyorum:. dün için kâr, dünden önceki gün için kâr

Bugünkü karı hesaplamak için kodu kopyaladım /

veya bugünkü kârdan elde edilen değerin dünkü kâra, sonra dünden önceki gün kâra daha düşük aktarılması için nasıl yapılır?
Dosyalar:
 
Lomonosov1991 :

Merhaba. Lütfen dün, dünden önceki gün, vb. kapatılan işlemlerden elde edilen karı hesaplama işlevine yardımcı olun. Bugün için Kar yapmak istiyorum:. dün için kâr, dünden önceki gün için kâr

Bugünkü karı hesaplamak için kodu kopyaladım /

veya bugünkü kârdan elde edilen değerin dünkü kâra, sonra dünden önceki gün kâra daha düşük aktarılması için nasıl yapılır?

fonksiyon açıklamasına bir parametre daha ekleyin ve kontrol koşulunu değiştirin:

 double GetProfitFromDateInCurrency( string sy= "" , int op=- 1 , int mn=- 1 , datetime dtstart, datetime dtstop)
....
if (OrderCloseTime()>=dtstart &&  dtstop<=OrderCloseTime()) {
 
Igor Makan'a teşekkürler. işlevi dün yaptım
 double GetProfitFromDateInCurrency2( string sy= "0" , int op=- 1 , int mn=- 1 )
{
   double p= 0 ;
   int     i, k=OrdersHistoryTotal();
   datetime dt=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE ))- 24 * 60 * 60 ;
   datetime dtstart=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE ));

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
               if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
   return (p);
}
ve işlevi dünden önceki gün yaptı
 double GetProfitFromDateInCurrency3( string sy= "0" , int op=- 1 , int mn=- 1 )
{
   double p= 0 ;
   int     i, k=OrdersHistoryTotal();
   datetime dt=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE ))- 24 * 60 * 60 * 2 ;
   datetime dtstart=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE ))- 24 * 60 * 60 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
               if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
   return (p);
}
Hafta sonu sıfırlanmaması mümkün mü? Yani, dün Pazartesi onun için Cuma idi. Peki haftasonundan nasıl kurtulursunuz?
Dosyalar:
Screenshot_2.png  844 kb