KimIV'ten faydalı özellikler - sayfa 5

 

Kabul ettiğin için teşekkürler... ;)

AND, OR, NOT nedir
Anlaşılması kolay, koddaki bu küçük şeyler ve ilgi çekici olan kullanım durumları .

Veya örneğin bu:
- a'nın b'ye EŞİTTİR koşulunun uygulanması daha kolaydır a==b
- ama a koşulu b'ye EŞİT DEĞİLDİR zaten zorluklara neden olacak ...

Temel bilgileri tekrar yükselttiğim için beni bağışlayın, ancak bu muhtemelen birçok yeni başlayan için kullanışlı olacaktır ...

Muharebe eğitim koşulları ile kendime hazır bir kod buldum. :)
Tanımlamanın kullanımından ve alanların düzenlenmesinden programcının "el yazısına" kadar her şey orada...
https://www.mql5.com/ru/forum/51521

 
kombat писал (а):
- ama a koşulu b'ye EŞİT DEĞİLDİR zaten zorluklara neden olacak ...
 a != b ;
 
Bana öyle geliyor ki Igor, konudan biraz saptın ve açıklamalara geçtin.
Mümkünse, görev çubuğu kısayolunda bir şey gösteren bir İşlev önermek isterim.
Terminali açmadan danışmanların çalışmalarını izlemek için kullanıyorum (birçok yabancı meraklı göz).
başka durumlarda da faydalı olabilir.

//----------- Görev çubuğunda görselleştirme işlevi -------------------------------- -----
geçersiz ProfMT(stringX)
{
int hwnd1 = WindowHandle(Symbol(), Period());
int hwnd_parent1 = 0;
while (! IsStopped() )
{
hwnd1= GetParent(hwnd1);
eğer (hwnd1 == 0) kırılırsa;
hwnd_parent1 = hwnd1;
}
if (hwnd_parent1 != 0) SetWindowTextA(hwnd_parent1,X);
}
Teşekkür ederim.
 

Vuuuuuuuu... forumda değilse başka nerede bu kadar çabuk gerçeği öğrenebilirsin... ;)

Teşekkürler! Ve konu dışına çıktığım için özür dilerim.
Daha çok yeni başlayanlara kitap konusunda soru sormaya çalışacağım...

 

Test cihazı için OpenPosition() işlevi.

Pozisyon açmak - piyasa fiyatlarında alım satım işlemleri yapmak için tasarlanmıştır. İşlev evrenseldir, çoklu para birimidir, yani sadece mevcut olanda değil, herhangi bir enstrümanda pozisyon açmanıza izin verir. Örneğin, EURUSD grafiğinde bir EA başlatılabilir ve USDCAD ticareti yapılabilir.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Открытие позиции. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" - текущий символ)                   |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
void OpenPosition ( string sy , int op , double ll , double sl = 0 , double tp = 0 , int mn = 0 ) {
  color  clOpen ;
  double pp ;
  int    err , ticket ;
 
  if ( sy == "" ) sy = Symbol () ;
  if ( op == OP_BUY ) {
    pp = MarketInfo ( sy , MODE_ASK ) ; clOpen = clOpenBuy ;
  } else {
    pp = MarketInfo ( sy , MODE_BID ) ; clOpen = clOpenSell ;
  }
  ticket = OrderSend ( sy , op , ll , pp , Slippage , sl , tp , "" , mn , 0 , clOpen ) ;
  if ( ticket < 0 ) {
    err = GetLastError () ;
    Print ( " Error( " , err , " ) open " , GetNameOP ( op ) , " : " , ErrorDescription ( err )) ;
    Print ( " Ask= " , Ask , " Bid= " , Bid , " sy= " , sy , " ll= " , ll ,
          " pp= " , pp , " sl= " , sl , " tp= " , tp , " mn= " , mn ) ;
  }
}
 

Çevrimiçi için OpenPosition() işlevi.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2008                                                     |
//|  Описание : Открывает позицию и возвращает её тикет.                       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
int OpenPosition ( string sy , int op , double ll , double sl = 0 , double tp = 0 , int mn = 0 ) {
  color    clOpen ;
  datetime ot ;
  double   pp , pa , pb ;
  int      dg , err , it , ticket = 0 ;
  string   lsComm = WindowExpertName () + " " + GetNameTF ( Period ()) ;
 
  if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
  if ( op == OP_BUY ) clOpen = clOpenBuy ; else clOpen = clOpenSell ;
  for ( it = 1 ; it <= NumberOfTry ; it ++ ) {
    if ( ! IsTesting () && ( ! IsExpertEnabled () || IsStopped ())) {
      Print ( " OpenPosition(): Остановка работы функции " ) ;
      break ;
    }
    while ( ! IsTradeAllowed ()) Sleep ( 5000 ) ;
    RefreshRates () ;
    dg = MarketInfo ( sy , MODE_DIGITS ) ;
    pa = MarketInfo ( sy , MODE_ASK ) ;
    pb = MarketInfo ( sy , MODE_BID ) ;
    if ( op == OP_BUY ) pp = pa ; else pp = pb ;
    pp = NormalizeDouble ( pp , dg ) ;
    ot = TimeCurrent () ;
    ticket = OrderSend ( sy , op , ll , pp , Slippage , sl , tp , lsComm , mn , 0 , clOpen ) ;
    if ( ticket > 0 ) {
      if ( UseSound ) PlaySound ( NameFileSound ) ; break ;
    } else {
      err = GetLastError () ;
      if ( pa == 0 && pb == 0 ) Message ( " Проверьте в Обзоре рынка наличие символа " + sy ) ;
      // Вывод сообщения об ошибке
      Print ( " Error( " , err , " ) opening position: " , ErrorDescription ( err ) , " , try " , it ) ;
      Print ( " Ask= " , pa , " Bid= " , pb , " sy= " , sy , " ll= " , ll , " op= " , GetNameOP ( op ) ,
            " pp= " , pp , " sl= " , sl , " tp= " , tp , " mn= " , mn ) ;
      // Блокировка работы советника
      if ( err == 2 || err == 64 || err == 65 || err == 133 ) {
        gbDisabled = True ; break ;
      }
      // Длительная пауза
      if ( err == 4 || err == 131 || err == 132 ) {
        Sleep ( 1000 * 300 ) ; break ;
      }
      if ( err == 128 || err == 142 || err == 143 ) {
        Sleep ( 1000 * 66.666 ) ;
        if ( ExistPositions ( sy , op , mn , ot )) {
          if ( UseSound ) PlaySound ( NameFileSound ) ; break ;
        }
      }
      if ( err == 140 || err == 148 || err == 4110 || err == 4111 ) break ;
      if ( err == 141 ) Sleep ( 1000 * 100 ) ;
      if ( err == 145 ) Sleep ( 1000 * 17 ) ;
      if ( err == 146 ) while ( IsTradeContextBusy ()) Sleep ( 1000 * 11 ) ;
      if ( err != 135 ) Sleep ( 1000 * 7.7 ) ;
    }
  }
  return ( ticket ) ;
}
 

OpenPosition() işlevini kullanma örnekleri.

1. Mevcut enstrümandan 0.1 lot satın alın

 OpenPosition ( NULL , OP_BUY , 0.1 ) ;

2. 0.2 lot EURUSD sat

 string sy =" EURUSD ";
double pa = MarketInfo ( " EURUSD " , MODE_ASK ) ;
double pb = MarketInfo ( " EURUSD " , MODE_BID ) ;
double po = MarketInfo ( " EURUSD " , MODE_POINT ) ;
OpenPosition ( sy , OP_SELL , 0.2 ) ;

3. 20 pip stop ile 0.12 lot USDCAD sat

 string sy =" USDCAD ";
double pa = MarketInfo ( " USDCAD " , MODE_ASK ) ;
double pb = MarketInfo ( " USDCAD " , MODE_BID ) ;
double po = MarketInfo ( " USDCAD " , MODE_POINT ) ;
OpenPosition ( " USDCAD " , OP_SELL , 0.12 , pb + 20 * po ) ;

4. 40 puan alarak 0.15 lot USDJPY satın alın

 string sy =" USDJPY ";
double pa = MarketInfo ( " USDJPY " , MODE_ASK ) ;
double pb = MarketInfo ( " USDJPY " , MODE_BID ) ;
double po = MarketInfo ( " USDJPY " , MODE_POINT ) ;
OpenPosition ( " USDJPY " , OP_BUY , 0.15 , 0 , pa + 40 * po ) ;

5. Stop 23 ile 0.1 lot GBPJPY sat ve 44 pip al

 string sy =" GBPJPY ";
double pa = MarketInfo ( " GBPJPY " , MODE_ASK ) ;
double pb = MarketInfo ( " GBPJPY " , MODE_BID ) ;
double po = MarketInfo ( " GBPJPY " , MODE_POINT ) ;
OpenPosition ( " GBPJPY " , OP_SELL , 0.1 , pb + 23 * po , pb - 44 * po ) ;
Fragmanda OpenPosition() işlevini test etmek için bir komut dosyası var. İlk 4 örnek yorumlanmıştır.
Dosyalar:
 
KimIV :

Çevrimiçi için OpenPosition() işlevi.

 //+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 21.03.2008 |
//| Описание : Открывает позицию и возвращает её тикет. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента (NULL или "" - текущий символ) |
//| op - операция |
//| ll - лот |
//| sl - уровень стоп |
//| tp - уровень тейк |
//| mn - MagicNumber |
//+----------------------------------------------------------------------------+
int OpenPosition ( string sy , int op , double ll , double sl = 0 , double tp = 0 , int mn = 0 ) {
//-- skip --
string lsComm = WindowExpertName () + " " + GetNameTF ( Period ()) ;
//-- skip --
Ve neden fonksiyon parametrelerinde lsComm'u çıkarmıyorsunuz? Örneğin şöyle:
 int OpenPosition ( string sy , int op , double ll , double sl = 0 , double tp = 0 , string lsComm = "" , int mn = 0 ) {
color clOpen ;
datetime ot ;
double pp , pa , pb ;
int dg , err , it , ticket = 0 ;

if ( lsComm == "" || lsComm == " 0 " ) lsComm = WindowExpertName () + " " + GetNameTF ( Period ()) ;
if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
IMHO, işlevin "esnekliği" genişliyor ..
 
Lukyanov писал (а):
Ve neden fonksiyon parametrelerinde lsComm'u çıkarmıyorsunuz?
IMHO, işlevin "esnekliği" genişliyor ..
Umurumda değil... Yani, yapmana izin veriyorum :-)
 
Bunu kendisi için yaptı. Sadece birisi için yararlı olabilir. :-)
Neden: