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

 

El sinyallerinde standart bir MT Expert Advisor'daki DecreaseFactor nedir?

lot= NormalizeDouble (lot-lot*losses/DecreaseFactor, 1 );
 
Nerd Trader # :

Garip, şimdi düğmeler var. Bir kod yığını, çünkü bu bir taslak. Genel olarak, zaten çalışan bir sürüm yaptım, kalan son şey düğmelerin kaldırılması, sonra bu saçmalık yeniden başladı: silme işlevinde 4 nesnenin hiçbiri bulunamadı.

Düğmeye tıklayarak tüm satırlar oluşturulur:

Düğme devre dışıysa - silin:

Hangi oyun yazılmış, pardon.

 
Artyom Trishkin # :

Olayları izlemek zorunda değilsiniz. Test cihazında hiç çalışmıyorlar. Duruma bakmak lazım.

UPD. Elbette mütevazi değil, ama tavsiyelerimi en az bir kez dinlemiş olsalardı, her şeyi uzun zaman önce yaparlardı. Doğru ve çok katlı koltuk değneği olmadan.

Ama herkes içine dalmak istediği uçurumu seçer.

Michael Matkovskij :

Bir test cihazında hata ayıklamayı kullanmak için MQL5'te yazmayı öğrenin. Her şey orada çalışıyor.

Nesne yeniden adlandırma yok. Mevcut bir nesneyi yeni bir nesneyle değiştirmek olarak düşünün.

Olamaz. Kodunuz her şeyin bir kargaşası gibidir. Belki de bu yüzden düğmelerde gecikmeler var. Daha önce de söylediğim gibi, basit başlayın. İşleri karmaşıklaştırmayın. Ve basit çalışmaya başladığında yavaş yavaş karmaşıklaşacak ve bundan emin olacaksınız.

Ve bir olay tarafından tetiklenirlerse (tıklama ile) durumları nasıl görebilirim? Evet, ama mql4'te yazıyorum, "c# ile yazmayı öğrenin hata ayıklama orada çalışır" demekle aynı şey.

"Doğru ve çok katlı koltuk değneği olmadan." - bu nedenle nesneleri gizlemek koltuk değneğidir.

Genel olarak her şeyi yaptım, her şey çalışıyor https://Gist.github.com/satorkain/0cf7a8df8ec1f4b3191defd04c94a418
Düğmeye tıklandığında, tüm satırlar bir kerede oluşturulur, hemen gizlenir ve düğme çubuğunun konumuna bağlı olarak yalnızca bir tanesi kalır. Ayrıca, fiyata göre imlecin konumuna bağlı olarak çizgiler gizlenir/gösterilir.

ZY

Eğer mql4 eğrisi olmasaydı, o zaman bu nesne gizleme saçmalığını ortaya çıkarmamıza gerek kalmazdı, nesneleri silme/yeniden adlandırma ile her şey ilk kez işe yaramalıydı.

stop order button (public).mq4
stop order button (public).mq4
  • gist.github.com
GitHub Gist: instantly share code, notes, and snippets.
 
Nerd Trader # :

Ve bir olay tarafından tetiklenirlerse (tıklama ile) durumları nasıl görebilirim? Evet, ama mql4'te yazıyorum, "c#'ta yazmayı öğren orada hata ayıklama çalışıyor" demekle aynı şey.

"Doğru ve çok katlı koltuk değneği olmadan." - bu nedenle nesneleri gizlemek koltuk değneğidir .

Genel olarak her şeyi yaptım, her şey çalışıyor https://Gist.github.com/satorkain/0cf7a8df8ec1f4b3191defd04c94a418
Düğmeye tıklandığında, tüm satırlar bir kerede oluşturulur, hemen gizlenir ve düğme çubuğunun konumuna bağlı olarak yalnızca bir tanesi kalır. Ayrıca, fiyata göre imlecin konumuna bağlı olarak çizgiler gizlenir/gösterilir.

ZY

mql4 eğrisi olmasaydı, o zaman bu nesneleri gizleme saçmalığını ortaya çıkarmamıza gerek kalmazdı, her şey ilk kez nesneleri silme/yeniden adlandırma ile çalışmalıydı.

Bir nesneyi gizlemek yalnızca geliştirici tarafından önerilen yöntemdir. Ve bunun için özel bir özellik var. Durumu görmek için butonun "State" özelliğine bakmanız gerekir.

Buradaki çarpık şey , mantığınız ve kavramların ikame edilmesidir - geliştirici tarafından bir koltuk değneği için önerilen araçları alırsınız ve bir nesnenin sürekli doymak bilmez bir şekilde oluşturulmasını/silinmesini saf kod olarak alırsınız, ancak şiddetli bir koltuk değneği olan odur. önerilen hızlı yöntemi atlayarak.

Bu arada, bir nesneyi diğerlerinin üzerine hızlı bir şekilde yapmak için, onu görünmez ve hemen görünür hale getirmeniz gerekir - bu, nesneler listesindeki konumunu geçersiz kılar ve en üstte olur.

not. Ve orada bile, git'te eksi ile bir C kodunu yayınladınız. Kesinlikle hataya dayanıklı. Bir satır oluşturulmadığı anda her şey çökecek. Bu hemen gözüme çarptı. Olay işleyicide satırlar oluşturuyorsunuz - neden? OnInit() size ne için? Oluşturuldu, başarıyı kontrol etti - bayrağı ayarla ve sakla. OnDeinit()'de programımız tarafından oluşturulan nesneleri sildik. Bunu yapmak için bir ad önekine de ihtiyacınız var.

Olay işleyicide, yalnızca gösterip gizlersiniz - herhangi bir yapı olmamalıdır. Senin davan için, evet.

Böyle bir şeyi kamuya açık alanda yayınlamaktan utanırım. Ama bu benim için.

peki sen? İnsanların kullanması normal mi?

 
Artyom Trishkin # :

Bir nesneyi gizlemek yalnızca geliştirici tarafından önerilen yöntemdir. Ve bunun için özel bir özellik var. Durumu görmek için butonun "State" özelliğine bakmanız gerekir.

Buradaki çarpık şey , mantığınız ve kavramların ikame edilmesidir - geliştirici tarafından bir koltuk değneği için önerilen araçları alırsınız ve bir nesnenin sürekli doymak bilmez bir şekilde oluşturulmasını/silinmesini saf kod olarak alırsınız, ancak şiddetli bir koltuk değneği olan odur. önerilen hızlı yöntemi atlayarak.

Bu arada, bir nesneyi diğerlerinin üzerine hızlı bir şekilde yapmak için, onu görünmez ve hemen görünür hale getirmeniz gerekir - bu, nesneler listesindeki konumunu geçersiz kılar ve en üstte olur.

not. Ve orada bile, git'te eksi ile bir C kodunu yayınladınız. Kesinlikle hataya dayanıklı. Yaratılmamak için tek bir satıra değer , her şey senin için çöker. Bu hemen gözüme çarptı. Olay işleyicide satırlar oluşturuyorsunuz - neden? OnInit() size ne için? Oluşturuldu, başarı kontrol edildi - bayrağı ayarlayın ve . OnDeinit()'de programımız tarafından oluşturulan nesneleri sildik. Bunu yapmak için bir ad önekine de ihtiyacınız var.

Olay işleyicide, yalnızca gösterip gizlersiniz - herhangi bir yapı olmamalıdır. Senin davan için, evet.

Böyle bir şeyi kamuya açık alanda yayınlamaktan utanırım. Ama bu benim için.

peki sen? İnsanların kullanması normal mi?

Gerektiğinde 4 satırdan 1 satır oluşturmak için oburluk mu? :) Peki ya 200 satır varsa? Mantığınıza göre hepsini bir kerede oluşturmak ekonomik olacak mı? Ve geliştiriciler tarafından tasarlandığından, bu sadece kendileri tarafından bilinir ve çok sezgisel olarak tasarlanmamıştır. Ne kadar inanılmaz veya mantıksız olursa olsun gerekliydi. Peki, nesnelerle sadece bu şekilde çalışmanın gerekli olduğunu, başka türlü değil, nasıl bilebilirdim? Belki mql4 eğitiminden? Bu noktanın orada açıklandığından şüpheliyim.

En azından amaçlandığı gibi çalışıyor :) Orada, parantez içindeki (genel) adında, yani henüz tamamlanmadı, ancak evet, nesne oluşturma kontrolü yok, düzelteceğiz. Ve yapıştırma kutusunu hatırlayamadığım için git'e gönderdim. Utanmış? Git, diğer şeylerin yanı sıra, insanların öğrenmesi, deneyimlerini paylaşması, kod paylaşması, çalışması ya da çalışmaması için icat edildi, fark etmez, herhangi bir şey kendisine uygun değilse herkes çatallayabilir ve değişiklik yapabilir.

İşte buradasınız, 250 nesne oluşturuldu ve bunları Expert Advisor'ın çalışması boyunca hafızamızda tutuyoruz. Tamam teşekkürler, haber vereceğim. Bu konuda ayrıca "sezgisel olmayan mantık" konuşuyorum. Öğreticide, örneğin OnInit() hakkında, yalnızca Uzman Danışman/gösterge başlatıldığında işlevin işlendiğini çıkarabilirsiniz.

 
Nerd Trader # :


Sana bir sır vereceğim. Bir "hesap makineniz" yoksa en az 1000 nesne ve daha fazlasını oluşturabilirsiniz. Ama bu da ona bağlı. Hesap makinesi bir bilgisayardır. RAM 4GB ile. Aşağıdaki her şey "büyükannenin puanı"... :) O halde en azından hepsini tek seferde, en azından birer birer nesneler oluşturun. Fark yok. Ama fanatizm olmadan.

Böylece, akıllıca yaparsanız, herkes için her şey yolunda gider! ...

 
Nerd Trader # :

Gerektiğinde 4 satırdan 1 satır oluşturmak için oburluk mu? :) Peki ya 200 satır varsa? Mantığınıza göre hepsini bir kerede oluşturmak ekonomik olacak mı? Ve geliştiriciler tarafından tasarlandığından, bu sadece kendileri tarafından bilinir ve çok sezgisel olarak tasarlanmamıştır. Ne kadar inanılmaz veya mantıksız olursa olsun gerekliydi. Peki, nesnelerle sadece bu şekilde çalışmanın gerekli olduğunu, başka türlü değil, nasıl bilebilirdim? Belki mql4 eğitiminden? Bunun orada açıklandığından şüpheliyim.

En azından amaçlandığı gibi çalışıyor :) Orada, parantez içindeki (genel) adında, yani henüz tamamlanmadı, ancak evet, nesne oluşturma kontrolü yok, düzelteceğiz. Ve yapıştırma kutusunu hatırlayamadığım için git'e gönderdim. Utanmış? Git, diğer şeylerin yanı sıra, insanların öğrenmesi, deneyimlerini paylaşması, kod paylaşması, çalışması ya da çalışmaması için icat edildi, fark etmez, herhangi bir şey kendisine uygun değilse herkes çatallayabilir ve değişiklik yapabilir.

İşte buradasınız, 250 nesne oluşturuldu ve bunları Expert Advisor'ın çalışması boyunca hafızamızda tutuyoruz. Tamam teşekkürler, haber vereceğim. Bu konuda ayrıca "sezgisel olmayan mantık" konuşuyorum. Öğreticide, örneğin OnInit() hakkında, yalnızca Uzman Danışman/gösterge başlatıldığında işlevin işlendiğini çıkarabilirsiniz.

Aynı anda istediğiniz kadar nesne oluşturabilirsiniz. MT, gösterge tamponları oluşturma konusunda tam olarak gelişmemişken, trend çizgileri ile 400 görünür mum, mum başına 5 satır, 400 * 5 = 2000 artı her biri ve diğerleri için bir nesne çizmek gerekiyordu. Toplamda yaklaşık 2500 nesne elde edildi. Aptallık olmadan çalıştı.

Nesnelerle çalışmanın mantığını tam olarak anlamıyorsunuz ama nasıl tartışılacağını biliyorsunuz. Bunun tersini yapmak daha iyidir.

 
Nerd Trader # :

Gerektiğinde 4 satırdan 1 satır oluşturmak için oburluk mu? :) Peki ya 200 satır varsa? Mantığınıza göre hepsini bir kerede oluşturmak ekonomik olacak mı? Ve geliştiriciler tarafından tasarlandığından, bu sadece kendileri tarafından bilinir ve çok sezgisel olarak tasarlanmamıştır. Ne kadar inanılmaz veya mantıksız olursa olsun gerekliydi. Peki, nesnelerle sadece bu şekilde çalışmanın gerekli olduğunu, başka türlü değil, nasıl bilebilirdim ? Belki mql4 eğitiminden? Bu noktanın orada açıklandığından şüpheliyim.

En azından amaçlandığı gibi çalışıyor :) Orada, parantez içindeki (genel) adında, yani henüz tamamlanmadı, ancak evet, nesne oluşturma kontrolü yok, düzelteceğiz. Ve yapıştırma kutusunu hatırlayamadığım için git'e gönderdim. Utanmış? Git, diğer şeylerin yanı sıra, insanların öğrenmesi, deneyimlerini paylaşması, kod paylaşması, çalışması ya da çalışmaması için icat edildi, fark etmez, herhangi bir şey kendisine uygun değilse herkes çatallayabilir ve değişiklik yapabilir.

İşte buradasınız, 250 nesne oluşturuldu ve bunları Expert Advisor'ın çalışması boyunca hafızamızda tutuyoruz. Tamam teşekkürler, haber vereceğim. Bu konuda ayrıca "sezgisel olmayan mantık" konuşuyorum. Öğreticide, örneğin OnInit() hakkında, yalnızca Uzman Danışman/gösterge başlatıldığında işlevin işlendiğini çıkarabilirsiniz.

İyi. Basit kelimelerle Rusça deneyeceğim.

balığa gidiyorsun.

  1. Evde kileri açtılar, kafalarının arkasını kaşıdılar ve kapattılar.
  2. Balık tutmaya geldim ve bir oltaya ihtiyacın var
  3. Bir olta için kilere eve gidelim
  4. Balık tutmaya geldik, yem attık ve balık tuttuk ve sonra bir ağa ihtiyacınız vardı.
  5. Bir ağ için kilere eve gidelim
  6. Balık tutmaya geldik, bir balık yakaladık ve bir ağ ile bir kancada yüzen bir balık tuttuk ve yakalanan balığı katlamak için bir kaba ihtiyacınız vardı.
  7. Hadi eve gidelim..... Devam etmeli miyim?

Ve balık tutmak için ihtiyacınız olan her şeyi kilerden (OnInit) hemen alabilir, etrafta koşmadan balık tutmaya gidebilir ve eve dönerek her şeyi kilere ve buzdolabına (OnDeinit) koyabilirsiniz.

Burada forumda bilgi sahibi olabilirsiniz . Bazen sadece dinlemeniz ve size ne dediklerini duymanız gerekir.

Ve ortaya çıktı, bir soru sordular, bir cevap aldılar, dediler ki - çöp ve sen düşündüğün gibi yap.

İlk önce soruyu düşünmeniz, etrafa sormanız ve ancak o zaman editörü üstlenmeniz gerekir.

Programlamada en kolay şeyin kod yazmak olduğunu biliyor musunuz? Ve aslanın kalkınmadaki payı mantık hakkında düşünmekle meşgul.

 

Soruyu ikinci kez gündeme getirdiğim için özür dilerim.

ama bir sorun var. henüz çözemediğim, yani

bir mum üzerinde bir dizi sipariş (birbiri ardına) açmak.

Aynı mum üzerinde yeni bir sipariş açamamak için EA'ya ihtiyacım var.

Sleep() ile çözmeyi düşündüm ama Makar süreci durdurmamanın daha iyi olduğunu söyledi.

sorun.

kod şimdi şöyle görünür:

 // Параметры советника
input string   sParametersEA = "" ;     // Параметры советника
input double   Lot           = 0.01 ;   // Количество лотов
input int      StopLoss      = 30 ;     // Уровень убытка
input int      TakeProfit    = 30 ;     // Уровень прибыли
input int      Slippage      = 3 ;       // Проскальзование (в пунктах)
input int      Magic         = 1 ;       // Индентификатор советника
input double   K_Martin1     = 2.0 ;     // Множитель мартин 1
input double   K_Martin2     = 2.0 ;     // Множитель мартин 2
input double   K_Martin3     = 2.0 ;     // Множитель мартин 3
input int      OrdersClose   = 5 ;       // Ограничение лотности мартин1
input int      OrdersClose2  = 5 ;       // Ограничение лотности мартин2
input int      DigitsLot     = 2 ;       // Точность лотности
// Параметры индикатора
input string   sParametersMA = "" ;     // Параметры индикатора
input int      PeriodMA      = 14 ;     // Период мувинга
input int      MovingShift   = 1 ;       // Сдвиг мувинга
// Глобальные переменные
string AC;
datetime Start;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
//+-----------------------------------------------------------------------------------------------+
int OnInit ()
  {
Start          = TimeCurrent ();
MaxMartinLot   = Lot* MathPow ( 1.4 ,OrdersClose);
MaxMartinLot2  = Lot* MathPow (K_Martin2,OrdersClose2);
AC             = StringConcatenate ( " " , AccountCurrency());
return ( INIT_SUCCEEDED );
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick ()
  {
// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
       if (CountOrders()== 0 )
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
       if (bSignalBuy() == true )
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
       if (bSignalSell() == true )
         vOrderOpenSell();
     }
   }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция проверки открытых оредров |
//+-----------------------------------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt= 0 ;
   int i= OrdersTotal ()- 1 ;
   for ( int pos=i;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol()== _Symbol )
           {
             if (OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return (cnt);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на покупку |
//+-----------------------------------------------------------------------------------------------+
bool bSignalBuy()
  {
   if (dMA > Open[ 1 ] && dMA < Close[ 1 ])   //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
       return ( true );

   return ( false );
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if (dMA < Open[ 1 ] && dMA > Close[ 1 ])
       return ( true );

   return ( false );
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на покупку |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenBuy()
  {
// Тикет ордера
   int iOTi = 0 ;   

   iOTi = OrderSend ( Symbol (), OP_BUY, LOT(), Ask, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE );
   
// Проверим открылся ли ордер
   if (iOTi > 0 )
// Есди да, то выставим уровни убытка и прибыли
      vOrderModify(iOTi);
   else
// Если нет, то получим ошибку
      vError( GetLastError ());
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на продажу |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenSell()
  {
// Тикет ордера  
   int iOTi = 0 ;   
//Print(bCheckOrders());
   iOTi = OrderSend ( Symbol (), OP_SELL, LOT(), Bid, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE );

// Проверим открылся ли ордер
   if (iOTi > 0 )
// Есди да, то выставим уровни убытка и прибыли
      vOrderModify(iOTi);
   else
// Если нет, то получим ошибку
      vError( GetLastError ());
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                    Функция модификации ордера |
//+-----------------------------------------------------------------------------------------------+
void vOrderModify( int iOTi)
  {
   int     iOTy = - 1 ;     // Тип ордера
   double dOOP = 0 ;     // Цена открытия ордера
   double dOSL = 0 ;     // Стоп Лосс
   int     iMag = 0 ;     // Идентификатор советника
   double dSL  = 0 ;     // Уровень убытка
   double dTP  = 0 ;     // Уровень прибыли

// Выберем по тикету открытый ордер, получим некоторые значения
   if ( OrderSelect (iOTi, SELECT_BY_TICKET, MODE_TRADES))
     {
      iOTy = OrderType();
      dOOP = OrderOpenPrice();
      dOSL = OrderStopLoss();
      iMag = OrderMagicNumber();
     }

// Если ордер открыл данный советник, то входим в условие
   if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMag)
     {
// Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордер
       if (dOSL == 0 )
        {
         if (iOTy == OP_BUY)
           {
            dSL = NormalizeDouble (dOOP - StopLoss * Point , Digits );
            dTP = NormalizeDouble (dOOP + TakeProfit * Point , Digits );

             bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE );
           }

         if (iOTy == OP_SELL)
           {
            dSL = NormalizeDouble (dOOP + StopLoss * Point , Digits );
            dTP = NormalizeDouble (dOOP - TakeProfit * Point , Digits );

             bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE );
           }
        }
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                      Функция обработки ошибок |
//+-----------------------------------------------------------------------------------------------+
void vError( int iErr)
  {
   switch (iErr)
     {
       case 129 :   // Неправильная цена
       case 135 :   // Цена изменилась
       case 136 :   // Нет цен
       case 138 :   // Новые цены
         Sleep ( 1000 );
         RefreshRates();
         break ;

       case 137 :   // Брокер занят
       case 146 :   // Подсистема торговли занята
         Sleep ( 3000 );
         RefreshRates();
         break ;
     }
  }
//+-----------------------------------------------------------------------------------------------+
double LOT()
{
   int n= 0 ;
   int m= 0 ;
   int v= 0 ;
   double OL=Lot;
   for ( int j = OrdersHistoryTotal()- 1 ; j >= 0 ; j--)
   {
       if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
         {
             if (OrderProfit()> 0 ) 
            {

               if (n== 0 ) OL= NormalizeDouble (OrderLots()+K_Martin1,DigitsLot);
               n++;
               
               if ((OL>=MaxMartinLot)&& (m== 0 )) OL= NormalizeDouble (OrderLots()*K_Martin2,DigitsLot);
               m++;
               
               if ((OL>=MaxMartinLot2) && (v== 0 )) OL= NormalizeDouble (OrderLots()*K_Martin3,DigitsLot);
               v++;
            }
             else
            {
               if (n== 0 ) { return (Lot);}
               else { return (OL);}
            }
         }
      }
   }
   
   return (OL);
}
 
законопослушный гражданин # :

Aynı mum üzerinde yeni bir sipariş açamamak için EA'ya ihtiyacım var.

 void OnTick ()
  {
   datetime cTime;
   static datetime time = 0 ;

  cTime = iTime (NULL, PERIOD_CURRENT, 0 );

   if (time != cTime)
    time = cTime;
   else
     return ;

// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
       if (CountOrders()== 0 )
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
       if (bSignalBuy() == true )
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
       if (bSignalSell() == true )
         vOrderOpenSell();
     }
   }