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

 

Bu doğru??

for(int i=1; i<=OrdersTotal(); i++) // Sipariş üzerinden döngü

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa

{

int OT=Sipariş Toplamı; //terminaldeki açık sipariş sayısı

çift Fiyat=SiparişOpenPrice(); //Seçilen siparişin fiyatı

double Mas[Fiyat][OT]; //tüm siparişleri sıralayan dizi

veya

for(int i=1; i<=OrdersTotal(); i++) // Sipariş üzerinden döngü

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa

{

çift Fiyat=SiparişOpenPrice(); // Seçilen siparişin fiyatı

çift Mas[Fiyat]; //tüm siparişleri fiyata göre sıralamak için dizi?

 
vikzip :

Bu doğru??

for(int i=1; i<=OrdersTotal(); i++) // Sipariş üzerinden döngü

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa

{

int OT=Sipariş Toplamı; //terminaldeki açık sipariş sayısı

çift Fiyat=SiparişOpenPrice(); //Seçilen siparişin fiyatı

double Mas[Fiyat][OT]; // tüm siparişleri sipariş etmek için dizi

veya

for(int i=1; i<=OrdersTotal(); i++) // Sipariş üzerinden döngü

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa

{

çift Fiyat=SiparişOpenPrice(); // Seçilen siparişin fiyatı

çift Mas[Fiyat]; //tüm siparişleri fiyata göre sıralamak için dizi?

1. OrdersTotal, toplam sipariş sayısını döndürür, ancak bunlar sıfırdan numaralandırılmıştır. Yani döngü i < OrdersTotal() olmalıdır

2. Dizi önceden double Mas[] olarak bildirilmelidir. Başarılı bir sipariş seçimi ile dizinin boyutu arttırılmalıdır, çünkü toplamda kaç tane olduğunu bilmiyoruz...

3. Köşeli parantezler, dizi dizisinin dizinini içermelidir. Mas[i] = Fiyat;

Sonuç olarak, her iki seçenek de yanlıştır.

 
Alexey Viktorov :

1. OrdersTotal, toplam sipariş sayısını döndürür, ancak bunlar sıfırdan numaralandırılmıştır. Yani döngü i < OrdersTotal() olmalıdır

2. Dizi önceden double Mas[] olarak bildirilmelidir. Başarılı bir sipariş seçimi ile dizinin boyutu arttırılmalıdır, çünkü toplamda kaç tane olduğunu bilmiyoruz...

3. Köşeli parantezler, dizi dizisinin dizinini içermelidir. Mas[i] = Fiyat;

Sonuç olarak, her iki seçenek de yanlıştır.


Çok teşekkürler!

 
Alexey Viktorov :

1. OrdersTotal, toplam sipariş sayısını döndürür, ancak bunlar sıfırdan numaralandırılmıştır. Yani döngü i < OrdersTotal() olmalıdır

2. Dizi önceden double Mas[] olarak bildirilmelidir. Başarılı bir sipariş seçimi ile dizinin boyutu arttırılmalıdır, çünkü toplamda kaç tane olduğunu bilmiyoruz...

3. Köşeli parantezler, dizi dizisinin dizinini içermelidir. Mas[i] = Fiyat;

Sonuç olarak, her iki seçenek de yanlıştır.


Bu durumda tek boyutlu bir sipariş fiyatları dizisi olacak mı?

çift Fiyat=SiparişOpenPrice(); // Seçilen siparişin fiyatı

double Mas[i] = Fiyat; //tüm siparişleri sıralayan dizi

for(int i=1; i<OrdersTotal();) // Siparişte döngü yap

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa

ben++;

}

 
vikzip :

Bu durumda tek boyutlu bir sipariş fiyatları dizisi olacak mı?

çift Fiyat=SiparişOpenPrice(); //Seçilen siparişin fiyatı

double Mas[i] = Fiyat; //tüm siparişleri sıralayan dizi

for(int i=1; i<OrdersTotal();) // Siparişte döngü yap

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa

ben++;

}

Numara. Aşağı yukarı böyle.
   double Price;               // Цена выбранного ордера
   double Mas[];                       //массив для упорядочивания всех ордеров
   for ( int i= 0 ; i< OrdersTotal (); i++;)           // Цикл перебора ордер
   {
     if ( OrderSelect (i, SELECT_BY_POS ) == true ) // Если есть следующий
     {
       ArrayResize (Mas, ArraySyze()+ 1 );
      Mas[i] = OrderOpenPrice ();
// или 
//    Price= OrderOpenPrice ();
//    Mas[i] = Price;
     }
   }

Vurgulanan ==true atlanabilir.

 
Alexey Viktorov :
Numara. Aşağı yukarı böyle.

Vurgulanan ==true atlanabilir.


Çok teşekkürler!

 
İyi günler, bir para biriminde kâr seçmek için bir satır var. 1) Danışmanın ayarlarında, sabit bir kâr (zaten olduğu gibi) veya yüzde olarak mevduatın bir kısmı arasında bir seçim olduğunu istiyorum. Lütfen bana nasıl yapacağımı söyle.
Orijinal satır burada:

Dış çifte kar =10;

2) Seçilen hesap bakiyesi rakamına göre otomatik kâr hesaplamasının açık, kapalı olmasını sağlayın.

Sonuç:
kar: sabit/otomatik hesaplama
Düzeltme - miktar.
Otomatik hesaplama - bakiye yüzdesi
Otomatik hesaplamayı etkinleştir - % cinsinden kârdan
Otomatik hesaplamayı devre dışı bırak - % cinsinden kayıptan
Otomatik hesaplamanın kâr/zararının hesaplanacağı değerin seçilmesi -
 

Merhaba. Her çubukta bekleyen bir emri kapatıp açmaktan nasıl kurtulacağımı söyle? Açılması ve ilgili sipariş açılana kadar beklemesi gerekir.

 //+------------------------------------------------------------------+
//|                                                e-News-Lucky$.mq4 |
//|                                                   Lucky$ & KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|   24.10.2005                                                     |
//| Выставление ордеров в определённое время на пробой диапазона.    |
//| Если ни один ордер не сработал, то модификация на каждом баре.   |
//+------------------------------------------------------------------+
#property copyright "Lucky$ & KimIV"
#property link        "http://www.kimiv.ru"
#define   MAGIC     123

//------- Внешние параметры советника --------------------------------
extern string _Parameters_Trade = "----- Параметры торговли" ;
extern double Lots           = 0.01 ;     // Размер торгуемого лота
extern int     StopLoss       = 0 ;       // Размер фиксированного стопа
extern int     TakeProfit     = 0 ;       // Размер фиксированного тэйка
extern string TimeSetOrders  = "10:30" ; // Время установки ордеров
extern string TimeDelOrders  = "22:30" ; // Время удаления ордеров
extern string TimeClosePos   = "22:30" ; // Время закрытия позиций
extern int     DistanceSet    = 200 ;       // Расстояние от рынка
extern bool    UseTrailing    = True ;     // Использовать трал
extern bool    ProfitTrailing = True ;     // Тралить только профит
extern int     TrailingStop   = 25 ;       // Фиксированный размер трала
extern int     TrailingStep   = 5 ;       // Шаг трала
extern int     Slippage       = 3 ;       // Проскальзывание цены

extern string _Parameters_Expert = "----- Параметры советника" ;
extern string Name_Expert   = "e-News-Lucky$" ;
extern bool    UseSound      = True ;         // Использовать звуковой сигнал
extern string NameFileSound = "expert.wav" ; // Наименование звукового файла
extern color   clOpenBuy     = LightBlue;     // Цвет открытия покупки
extern color   clOpenSell    = LightCoral;   // Цвет открытия продажи
extern color   clModifyBuy   = Aqua;         // Цвет модификации покупки
extern color   clModifySell  = Tomato;       // Цвет модификации продажи
extern color   clCloseBuy    = Blue;         // Цвет закрытия покупки
extern color   clCloseSell   = Red;           // Цвет закрытия продажи

//---- Глобальные переменные советника -------------------------------
int prevBar;

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
void deinit() {
   Comment ( "" );
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start() {
   if ( TimeToStr ( CurTime (), TIME_MINUTES )==TimeSetOrders) SetOrders();
   if (prevBar!= Bars && ExistOrder( 1 ) && ExistOrder( 2 )) ModifyOrders();
  DeleteOppositeOrders();
  TrailingPositions();
   if ( TimeToStr ( CurTime (), TIME_DATE )==TimeDelOrders) DeleteAllOrders();
   if ( TimeToStr ( CurTime (), TIME_MINUTES )==TimeClosePos) CloseAllPositions();
  prevBar= Bars ;
}

//+------------------------------------------------------------------+
//| Установка ордеров                                                |
//+------------------------------------------------------------------+
void SetOrders() {
   double ldStop= 0 , ldTake= 0 ;
   int     spr= MarketInfo ( Symbol (), MODE_SPREAD );
   double pAsk= Ask +(DistanceSet+spr)* Point ;
   double pBid= Bid -DistanceSet* Point ;

   if (!ExistOrder( 1 )) {
     if (StopLoss!= 0 ) ldStop=pAsk-StopLoss* Point ;
     if (TakeProfit!= 0 ) ldTake=pAsk+TakeProfit* Point ;
    SetOrder( OP_BUYSTOP , pAsk, ldStop, ldTake, 1 );
  }
   if (!ExistOrder( 2 )) {
     if (StopLoss!= 0 ) ldStop=pBid+StopLoss* Point ;
     if (TakeProfit!= 0 ) ldTake=pBid-TakeProfit* Point ;
    SetOrder( OP_SELLSTOP , pBid, ldStop, ldTake, 2 );
  }
}

//+------------------------------------------------------------------+
//| Модификация ордеров                                              |
//+------------------------------------------------------------------+
void ModifyOrders() {
bool ret;
   double ldStop= 0 , ldTake= 0 ;
   int     spr= MarketInfo ( Symbol (), MODE_SPREAD );
   double pAsk= Ask +(DistanceSet+spr)* Point ;
   double pBid= Bid -DistanceSet* Point ;

   for ( int i= 0 ; i< OrdersTotal (); i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC+ 1 ) {
         if (StopLoss!= 0 ) ldStop=pAsk-StopLoss* Point ;
         if (TakeProfit!= 0 ) ldTake=pAsk+TakeProfit* Point ;
        ret= OrderModify ( OrderTicket (), pAsk, ldStop, ldTake, 0 , clModifyBuy);
      }
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC+ 2 ) {
         if (StopLoss!= 0 ) ldStop=pBid+StopLoss* Point ;
         if (TakeProfit!= 0 ) ldTake=pBid-TakeProfit* Point ;
        ret= OrderModify ( OrderTicket (), pBid, ldStop, ldTake, 0 , clModifySell);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Возвращает флаг существования ордера или позиции по номеру       |
//+------------------------------------------------------------------+
bool ExistOrder( int mn) {
   bool Exist= False ;
   for ( int i= 0 ; i< OrdersTotal (); i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC+mn) {
        Exist= True ; break ;
      }
    }
  }
   return (Exist);
}

//+------------------------------------------------------------------+
//| Возвращает флаг существования позиции по номеру                  |
//+------------------------------------------------------------------+
bool ExistPosition( int mn) {
   bool Exist= False ;
   for ( int i= 0 ; i< OrdersTotal (); i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC+mn) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
          Exist= True ; break ;
        }
      }
    }
  }
   return (Exist);
}

//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//| Параметры:                                                       |
//|   op     - операция                                              |
//|   pp     - цена                                                  |
//|   ldStop - уровень стоп                                          |
//|   ldTake - уровень тейк                                          |
//|   mn     - добавить к MAGIC                                      |
//+------------------------------------------------------------------+
void SetOrder( int op, double pp, double ldStop, double ldTake, int mn) {
   bool ret;
   color   clOpen;
   string lsComm=GetCommentForOrder();

   if (op== OP_BUYSTOP ) clOpen=clOpenBuy;
   else clOpen=clOpenSell;
  ret= OrderSend ( Symbol (),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC+mn, 0 ,clOpen);
   if (UseSound) PlaySound (NameFileSound);
}

//+------------------------------------------------------------------+
//| Генерирует и возвращает строку коментария для ордера или позиции |
//+------------------------------------------------------------------+
string GetCommentForOrder() {
   return (Name_Expert);
}

//+------------------------------------------------------------------+
//| Удаление всех ордеров                                            |
//+------------------------------------------------------------------+
void DeleteAllOrders() {
   bool fd;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderMagicNumber ()>MAGIC && OrderMagicNumber ()<=MAGIC+ 2 ) {
         if ( OrderSymbol ()== Symbol ()) {
           if ( OrderType ()== OP_BUYSTOP || OrderType ()== OP_SELLSTOP ) {
            fd= OrderDelete ( OrderTicket ());
             if (fd && UseSound) PlaySound (NameFileSound);
          }
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Закрытие всех позиций по рыночной цене                           |
//+------------------------------------------------------------------+
void CloseAllPositions() {
   bool fc;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderMagicNumber ()>MAGIC && OrderMagicNumber ()<=MAGIC+ 2 ) {
         if ( OrderSymbol ()== Symbol ()) {
          fc= False ;
           if ( OrderType ()== OP_BUY ) {
            fc= OrderClose ( OrderTicket (), OrderLots (), Bid , Slippage, clCloseBuy);
          }
           if ( OrderType ()== OP_SELL ) {
            fc= OrderClose ( OrderTicket (), OrderLots (), Ask , Slippage, clCloseSell);
          }
           if (fc && UseSound) PlaySound (NameFileSound);
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Удаление противоположных ордеров                                 |
//+------------------------------------------------------------------+
void DeleteOppositeOrders() {
   bool fd, fep1, fep2;

  fep1=ExistPosition( 1 );
  fep2=ExistPosition( 2 );

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()== Symbol ()) {
        fd= False ;
         if ( OrderType ()== OP_BUYSTOP && OrderMagicNumber ()==MAGIC+ 1 ) {
           if (fep2) fd= OrderDelete ( OrderTicket ());
        }
         if ( OrderType ()== OP_SELLSTOP && OrderMagicNumber ()==MAGIC+ 2 ) {
           if (fep1) fd= OrderDelete ( OrderTicket ());
        }
         if (fd && UseSound) PlaySound (NameFileSound);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions() {
   for ( int i= 0 ; i< OrdersTotal (); i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderMagicNumber ()>MAGIC && OrderMagicNumber ()<=MAGIC+ 2 ) {
         if ( OrderSymbol ()== Symbol ()) {
           if ( OrderType ()== OP_BUY ) {
             if (!ProfitTrailing || ( Bid - OrderOpenPrice ())>TrailingStop* Point ) {
               if ( OrderStopLoss ()< Bid -(TrailingStop+TrailingStep- 1 )* Point ) {
                ModifyStopLoss( Bid -TrailingStop* Point , clModifyBuy);
              }
            }
          }
           if ( OrderType ()== OP_SELL ) {
             if (!ProfitTrailing || OrderOpenPrice ()- Ask >TrailingStop* Point ) {
               if ( OrderStopLoss ()> Ask +(TrailingStop+TrailingStep- 1 )* Point || OrderStopLoss ()== 0 ) {
                ModifyStopLoss( Ask +TrailingStop* Point , clModifySell);
              }
            }
          }
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//|   clModify   - цвет модификации                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss( double ldStop, color clModify) {
   bool    fm;
   double ldOpen= OrderOpenPrice ();
   double ldTake= OrderTakeProfit ();

  fm= OrderModify ( OrderTicket (), ldOpen, ldStop, ldTake, 0 , clModify);
   if (fm && UseSound) PlaySound (NameFileSound);
}
//+------------------------------------------------------------------+

 

Merhaba. Burada ClasterDelta'dan gösterge kullanan var mı? VolumeProfile göstergesindeki verilerin otomatik kullanımı hakkında bir sorum var. Gerçek şu ki, bu gösterge hiçbir şey döndürmez, ancak yalnızca trend çizgilerinden bir histogram çizer. Ancak bu çizginin üzerine geldiğinizde, bu tik için işlem gören hacmin değeri görünür. Bu bilgi bir hindiden nasıl çıkarılır!

Düşünceler neler?

 

Daha önce ders çalışırken karşılaştığım gibi, yine makalelerde anlatılmayan veya arama motorundan bulmak mümkün olmayacak şekilde bir yere gizlenmiş nüanslar var. Bütün gün açıklama arayarak harcandı. Örneğin, bu sembol ne anlama geliyor ve değilse nasıl etkiliyor. Aşağıdaki makaledeki örnekte de görebileceğiniz gibi, önce orada, sonra yok: &

   // Для int. Проверка существования в массиве элемента с заданным значением
   int Find( int & aArray[], int aValue)
     {
       for ( int i= 0 ; i< ArraySize (aArray); i++) 
        {
         if (aArray[i]==aValue) 
           {
             return (i); // Элемент существует, возвращаем индекс элемента
           }
        }
       return (- 1 ); // Нет такого элемента, возвращаем -1
     }

Ayrıca, bu sembolün ne anlama geldiği açık değildir: ~

   // Конструктор
                     CName() { Alert ( "Конструктор" ); }
   // Деструктор
                     ~ CName() { Alert ( "Деструктор" ); }

*

CInfo * returnInfo()
  {
   CInfo * i = new CInfo();
   i.symbol= _Symbol ;

   return i;
  }