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

 
Valeriy Yastremskiy # :
İlk olarak, döngüden önceki fark 1000'dir. Döngüde, açılış fiyatı eksi cari fiyat modulo farktan küçükse, fark alınan değere eşittir ve bilet bir değişkende saklanır.

İçeride, ben de aynı şeyi düşündüm) Ama bir şeyler ters gitti. Güncel fiyata en yakın emrin açılış fiyatının online olarak nasıl takip edileceğine dair bir örnek verebilir misiniz? Ya da belki onları karşılaştırın ve en düşük fiyatı arayın)

 double FindSellOpen() 

{
   int oldticket;
   double oldopenprice= 0 ;
   ticket= 0 ;
   double Dist= 1000000.0 ;
   
   for ( int i= 1 ; i<= OrdersTotal (); i++) 
   {
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)== true )
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            oldticket = OrderTicket();
             if ( NormalizeDouble ( MathAbs (oldticket), Digits ) < NormalizeDouble (Dist, Digits )) 
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return (oldopenprice);
}
 
makssub # :

İçeride, ben de aynı şeyi düşündüm) Ama bir şeyler ters gitti. Güncel fiyata en yakın emrin açılış fiyatının online olarak nasıl takip edileceğine dair bir örnek verebilir misiniz? Ya da belki onları karşılaştırın ve en düşük fiyatı arayın)

Buna bir bak:

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 05.06.2008                                                     |
//|  Описание : Возвращает тикет ближайшей к рынку позиции по цене открытия.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int TicketNearPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double mi, p;
   int     i, k= OrdersTotal (), pp= 0 , ti= 0 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
             if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
             if (p== 0 ) if ( StringFind (sy, "JPY" )< 0 ) p= 0.0001 ; else p= 0.01 ;
             if (pp== 0 || pp> MathAbs (OrderOpenPrice()-mi)/p) {
              pp= MathAbs (OrderOpenPrice()-mi)/p;
              ti=OrderTicket();
            }
          }
        }
      }
    }
  }
   return (ti);
}
 
MakarFX # :

ve düzelt

MakarFX # :

MODE_SPREAD ile çarpmaya gerek yok - Puan cinsinden yayılma

Kontrol edebilirsin

ve bunu yap

İyi günler Makar!!!

Burada, minimum ve maksimum siparişleri kapatma mantığının net olacağı kodun iki bölümü bulunmaktadır. Kelimelerde kulağa şöyle geliyor: "Siparişlerin ızgarasından çekilen miktar belirli bir seviyeyi aşarsa, ızgaradaki minimum ve maksimum siparişleri belirtilen seviyeden az olmayan bir kârla kapatırız" .

Sonraki "Dezavantaj belirtilen seviyenin altına düşerse, zararlı tüm siparişler için kârlı tüm siparişlerin ortalamasını alma ilkesine dönüyoruz"

Sonraki "Dezavantaj belirtilen seviyenin altına düşmediyse, belirli bir kâra ulaşıldığında sonraki minimum ve maksimum siparişleri tekrar kapatın"

Şimdi danışman, düşüş aşılırsa, minimum kâr ve maksimum siparişler yerine getirilirse, danışmanın ilk çifti olması gerektiği gibi kapattığını, ancak geri kalan her şeyi aynı fiyatta, kâr hesaplamasını göz ardı ederek anlar.

Anladığım kadarıyla, zamanında durması için OrderClose () işleviyle uğraşmanız gerekiyor . Şimdiden teşekkür ederim!!!!

 if (CountTrade() < MaxOrders)                                                           
       {
           int order_type = FindLastOrderType();
           if (order_type == OP_BUY)
           { 
              price = FindLastOrderPrice(OP_BUY);  
               if (Ask<= price - Step()* Point )
              {
                  lastlot = NormalizeDouble (GetMinLotOrder()* MathPow ( MultiplierParameter, OrdersTotal ()), 2 );
                  ticket = OrderSend ( Symbol (), OP_BUY, lastlot, Ask, slip, 0 , 0 , "Групповой ордер" , Magic, 0 , Blue);
                   if (ticket < 1 )
                       Print ( "Ошибка ордера на покупку" );
                  ModifyOrders(OP_BUY);
              }
           }
             if (order_type == OP_SELL)
           { 
              price = FindLastOrderPrice(OP_SELL);  
               if (Bid>= price + Step()* Point )
              {
                  lastlot = NormalizeDouble (GetMinLotOrder()* MathPow ( MultiplierParameter, OrdersTotal ()), 2 );
                  ticket = OrderSend ( Symbol (), OP_SELL, lastlot, Bid, slip, 0 , 0 , "Групповой ордер" , Magic, 0 , Red);
                   if (ticket < 1 )
                       Print ( "Ошибка ордера на продажу!" );
                  ModifyOrders(OP_SELL);
              }
           }
         } 
         double op = CalculiteProfit(); 
         if (op > ProfitMinMaxOrders && Drawdown > DrawdownClosingMinMaxOrders)
           {
           ClosseMinMaxOrders();
           } 

//+----------------------------------------------------------------------------+
//| Калькуляция профита максимального и минимального ордера в сетке            |
//+----------------------------------------------------------------------------+
double CalculiteProfit()
{
     double AmountMinMaxProfit = 0 ;
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
    {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
        {
           if (OrderType() == OP_BUY || OrderType() == OP_SELL)
          {
            AmountMinMaxProfit = GetProfitMinOrder() + GetProfitMaxOrder();
          }
        }
      }
    }
     return (AmountMinMaxProfit);
}
//+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxOrders()
{
   int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
        {
         if (OrderType() == OP_BUY)
          {
         if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
             Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
          }   
   
         if (OrderType() == OP_SELL)
         {
         if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
             Print ( "Максимальный и минимальный ордера на продажу успешно закрыты!" );
         else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ());
         }
       } 
     }
  }
}


 
Tünaydın! İlkel soru için çok üzgünüm, ancak kiracı danışmanının bağlantılarını nerede bulabilirim? Veya danışmanı satın alan/kiralayan kişiyle nasıl iletişime geçilir?
 
Oleksandr Nozemtsev # :
Tünaydın! İlkel soru için çok üzgünüm, ancak kiracı danışmanının bağlantılarını nerede bulabilirim? Veya danışmanı satın alan/kiralayan kişiyle nasıl iletişime geçilir?

Mümkün değil. Ürün Tartışması sekmesinde bir diyalog kurabilirsiniz. Haberleri uygun sekmede yayınlayabilirsiniz.

 
Vladimir Karputov # :

Mümkün değil. Ürün Tartışması sekmesinde bir diyalog kurabilirsiniz. Haberleri uygun sekmede yayınlayabilirsiniz.

Teşekkür ederim!

 
Tünaydın.
Bana mt 5'teki tırnakları nerede temizleyeceğimi söyle?
Ve her şeyi değil, sadece eskileri silmek mümkün mü?
 
Roman Kutemov # :
Tünaydın.
Bana mt 5'teki alıntıları nerede temizleyeceğimi söyle?
Ve her şeyi değil, sadece eskileri silmek mümkün mü?
C:\MetaTrader5\bases\MetaQuotes-Server\history
 
EVGENII SHELIPOV # :

İyi günler !!!

Sana başka bir fonksiyon verdim ... bir şey eklemene gerek yok

 //+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxOrders()
{
   int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
        {
         if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
             Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
         else
             Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
       } 
     }
  }
}

Ya da taşıyabilirsiniz...

 //+----------------------------------------------------------------------------+
//| Закрытие минимального и максимального ордеров                              |
//+----------------------------------------------------------------------------+
void   ClosseMinMaxOrders()
{
   int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   if (CalculiteProfit() > ProfitMinMaxOrders && Drawdown > DrawdownClosingMinMaxOrders)
  {   
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
        {
           if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
           {
             if (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
               Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" );
             else
               Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ());
          } 
        }
     }
  }   
}
 
MakarFX # :

Sana başka bir fonksiyon verdim ... bir şey eklemene gerek yok

Ya da taşıyabilirsiniz...

hiçbirşey değişmedi