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

 
sibiriyak73 :

Hata nereye kaydı?

Birçok sembol olduğu için birçok "açıklık" vardır.

 struct Orders
   {
   string symbol;
   bool open;
   } orders[];

int OnInit ()
   {
   ArrayResize (orders, 2 );
   orders[ 0 ].symbol= "EURUSD" ;
   orders[ 0 ].open= false ;
   orders[ 1 ].symbol= "USDJPY" ;
   orders[ 1 ].open= false ;
   return ( INIT_SUCCEEDED );
   }

void OnTick ()
   {
   for ( int i= 0 ; i<2; i++)
      {
       if (!orders[i].open)
         {
         int ticket1= OrderSend (orders[i].symbol,OP_SELLSTOP, 1.5 ,limit1, 10 ,SL1,TP1, NULL , 0 , 0 , clrRed );   //Здесь открываем
         orders[i].open= true ;
         }
      }
........


 
Aleksei Stepanenko :

Birçok sembol olduğu için birçok "açıklık" vardır.

Sağol kanka. Mevcut enstrümanda günde bir işlem açacak ve enstrümanların geri kalanını hesaba katmayacak şekilde nasıl yapılır (danışman birkaç enstrüman üzerinde çalışır)
 
sibiriyak73 :
Sağol kanka. Mevcut enstrümanda günde bir işlem açacak ve enstrümanların geri kalanını hesaba katmayacak şekilde nasıl yapılır (danışman birkaç enstrüman üzerinde çalışır)

- sihir ve sembollerine göre emirlerin geçmişine bakın, emrin açılış (veya kapanış?) zamanı mevcut tarihe karşılık geliyorsa, OnTick()'ten çıkın

- TF D1'deki "yeni çubuğu" kontrol edin


ilk yöntem - daha fazla karalama, ancak MT4 test cihazında çok hızlı çalışacak, ikinci yöntem - 3 satır kod, ancak test cihazında sabit sürücüyü "çiğneyecek" ve test süresi daha uzun olacak

 
sibiriyak73 :
(danışman birkaç enstrümanın üzerinde durur)

Ve sanırım anlıyorum, birden fazla enstrüman konusunda danışmanınız varsa, siparişin bir danışmana ait olup olmadığını görmek için bir çek eklemeniz yeterlidir.

 int OPEN= 1 ;

int total= OrdersTotal ();
for ( int i= 0 ; i<total; i++)
   {
   if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()== 0 && OrderSymbol()== Symbol ())
      {
      OPEN= 0 ;
       break ;
      }
   }

if (OPEN== 1 )
   {
   int ticket1= OrderSend ( Symbol (),OP_SELLSTOP, 1.5 ,limit1, 10 ,SL1,TP1, NULL , 0 , 0 , clrRed );   //Здесь открываем
   }
 
Aleksei Stepanenko :

Ve sanırım anlıyorum, eğer birkaç enstrüman üzerinde danışmanınız varsa, siparişin bir danışmana ait olup olmadığını görmek için bir çek eklemeniz yeterlidir.

Bu kod çok sayıda işlemi açar. Fikir doğru ama nasıl doğru bir şekilde uygulanacağı.

 
sibiriyak73 :

Bu kod çok sayıda işlemi açar. Fikir doğru ama nasıl doğru bir şekilde uygulanacağı.

ihtiyacın var

isTradeToDay() işlevi.

Bu işlev, bugünün ticari bayrağını döndürür

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

Burada bir kod parçasıyla ne tahmin edilebilir, orada ne var?

Bir çek koyun, günde bir defadan fazla değil.

 datetime last_time= 0 ;   
MqlDateTime date1, date2; 

void OnTick ()
   {
   int OPEN= 1 ;

   int total= OrdersTotal ();
   for ( int i= 0 ; i<total; i++)
      {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()== 0 && OrderSymbol()== Symbol ())
         {
         OPEN= 0 ;
         break ;
         }
      }
      
   TimeToStruct (last_time,date1);
   TimeToStruct ( iTime ( Symbol (), 0 , 0 ),date2);
   if (date1.day==date2.day)
      {
      OPEN= 0 ;
      }

   if (OPEN== 1 )
      {

       int ticket1= OrderSend ( Symbol (),OP_SELLSTOP, 1.5 ,limit1, 10 ,SL1,TP1, NULL , 0 , 0 , clrRed );   //Здесь открываем
       if (ticket1>= 0 && OrderSelect (ticket1,SELECT_BY_TICKET,MODE_TRADES))
         {
         last_time=OrderOpenTime();
         }
      }

 
sibiriyak73 :

Beyler, danışmana yardım edin, ENSTRÜMANDA günde bir anlaşma açmanız gerekir.

şöyle deneyebilirsin

 datetime dt = iTime ( _Symbol , PERIOD_D1 , 0 );

   for ( int i = 0 ; i < OrdersHistoryTotal(); i++) 
    {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY))
      {
       if ((OrderSymbol() != _Symbol ) && (dt < OrderCloseTime())
        {
         Открываем ордер;
        }
      }
    }
 
MakarFX :

şöyle deneyebilirsin

Her şey uzun zaman önce yazılmıştı ... çok uzun zaman önce.

Bu kod, piyasada ne olduğunu ve bugün zaten kapalı olması durumunda geçmişte ne olduğunu kontrol eder.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг торгов сегодня.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isTradeToDay( string sy= "" , int op=- 1 , int mn=- 1 ) {
   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== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return (True);
            }
          }
        }
      }
    }
  }
  k= OrdersTotal ();
   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) {
               if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return (True);
            }
          }
        }
      }
    }
  }
   return (False);
}
 
Aleksei Stepanenko :

Burada bir kod parçasıyla ne tahmin edilebilir, orada ne var?

Bir çek koyun, günde bir defadan fazla değil.

Selamlar. Sorun şu ki, danışman hesapta açık bir anlaşma görürse, artık anlaşmaları açmaz. Eh, "Hesabınızda açık işlemleriniz var, benden ne istiyorsunuz" gibi bir şey. Bu Uzman Danışman birkaç enstrümana dayandığından, TAM BU ENSTRÜMANDA (örneğin EUR USD) birden fazla ticaretin açılmaması gerektiğini ona açıklamam gerekiyor. Kodun tamamını yaymak için ( bildirilen değişkenlerle büyük, vb.), yanlış olacağını düşünüyorum.