Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1096

 
EgorKim :

A ve B noktalarının zamanı ve fiyatına sahibim

C noktasının zamanı ve fiyatı nasıl bulunur? A ve B arasında ortada.

Hiçbir yerde bir örnek bulamıyorum.


 //+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect( const int left_bar, const double left_price, const int right_bar, const double right_price, const int bar_to_search) 
  {
   return (right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+
 
EgorKim :

A ve B noktalarının zamanı ve fiyatına sahibim

C noktasının zamanı ve fiyatı nasıl bulunur? A ve B arasında ortada.

Hiçbir yerde bir örnek bulamıyorum.


Zaman C = Zaman B - ( (Zaman B - Zaman A) / 2)

Zaman Fiyat

 
Сергей Таболин :

Zaman C = Zaman B - ( (Zaman B - Zaman A) / 2)

Zaman Fiyat

Kontrol ettim, bazen hafta sonu geliyorum)

Çizginin kendisinde merkezi bulmak mümkün mü?

İşte benim hattım

 void SetLow( double price_1, double price_2, datetime time_1, datetime time_2)
  {
   ObjectCreate ( 0 , "Low" , OBJ_TREND , 0 ,time_2,price_2,time_1,price_1);
   ObjectSetInteger ( 0 , "Low" , OBJPROP_COLOR , clrAqua );
   ObjectSetInteger ( 0 , "Low" , OBJPROP_WIDTH , 2 );
   ObjectSetInteger ( 0 , "Low" , OBJPROP_STYLE , STYLE_DOT );
   ObjectSetInteger ( 0 , "Low" , OBJPROP_BACK , false );
   ObjectSetInteger ( 0 , "Low" , OBJPROP_RAY_RIGHT , true );
  }
 
Igor Makanu :

son açık siparişin bileti nasıl bulunur? şu şekilde çalışmıyor:

Tam olarak neyi bilmek istiyorsun? SİPARİŞ, FAZLA ve POZİSYON kavramlarını net bir şekilde ayırmak gerekir.

İkincisi, CTrade sınıfının nesnelerini "order_1" ""order_2" kelimeleriyle adlandırarak hemen kafa karıştırdılar.CTrade sınıfının nesneleri genellikle "m_trade_1" ve "m_trade_2" olarak adlandırılır.Bu performansı etkilemez, ancak kafa karışıklığı getirir.

Üçüncüsü: PositionClose yöntemi, sıfıra eşit bir konum bileti ilettiğiniz için (ve bunları OnInit() içinde sıfır ile başlattığınız için) çalışmaz - bu tür ideal koşullar, ilk konumun bir "0" bileti olduğunda, yalnızca olabilir test cihazında elde edildi.

Dördüncüsü: Satın Alma yöntemi

Not

Buy(...) yönteminin başarıyla tamamlanması, her zaman bir ticaret işleminin başarılı bir şekilde yürütülmesi anlamına gelmez. ResultRetcode() yöntemini çağırarak bir ticaret talebinin (işlem sunucusu dönüş kodu ) yürütme sonucunun yanı sıra yöntem tarafından döndürülen değerin kontrol edilmesi gerekir.   ResultDeal() .


ResultDeal() Yöntemi

Bir DEAL bileti alır.

 
Vladimir Karputov :

Tam olarak neyi bilmek istiyorsun? SİPARİŞ, FAZLA ve POZİSYON kavramlarını net bir şekilde ayırmak gerekir.

İkincisi, CTrade sınıfının nesnelerini "order_1" ""order_2" kelimeleriyle adlandırarak hemen kafa karıştırdılar.CTrade sınıfının nesneleri genellikle "m_trade_1" ve "m_trade_2" olarak adlandırılır.Bu performansı etkilemez, ancak kafa karışıklığı getirir.

Üçüncüsü: PositionClose yöntemi, sıfıra eşit bir konum bileti ilettiğiniz için (ve bunları OnInit() içinde sıfır ile başlattığınız için) çalışmaz - bu tür ideal koşullar, ilk konumun bir "0" bileti olduğunda, yalnızca olabilir test cihazında elde edildi.

Dördüncüsü: Satın alma yöntemi

Not

Buy(...) yönteminin başarıyla tamamlanması, her zaman bir ticaret işleminin başarılı bir şekilde yürütülmesi anlamına gelmez. ResultRetcode() yöntemini çağırarak bir ticaret talebinin (işlem sunucusu dönüş kodu ) yürütme sonucunun yanı sıra yöntem tarafından döndürülen değerin kontrol edilmesi gerekir.   ResultDeal() .


ResultDeal() Yöntemi

Bir DEAL bileti alır.

Teşekkür ederim! anladım zaten

genel olarak sorun bilgi, dedikodu ve fırsatların bolluğundan kaynaklanıyordu .... Result()'daki bileti yakalayamayacağımdan emindim, çünkü bir süre sonra OnTradeTransaction() olayını hatırlamaya başlıyorlar. .. ve gidiyoruz!

şimdi MT5 test cihazıyla ilgileniyorum, yalnızca tekrarlanabilir örneklere ihtiyacımız olsa da, işlevsel koddan bahsetmiyoruz - şimdiye kadar yalnızca bir test cihazı

yardımın için tekrar teşekkürler!

bu kod, test cihazındaki en son siparişlerin biletlerini alabilir:

 //+------------------------------------------------------------------+
//|                                                   tst_CTrade.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"

input double Lot_1 = 0.10 ;
input double Lot_2 = 0.20 ;
input ulong   Magic1 = 12345 ;
input ulong   Magic2 = 67890 ;
#include<Trade\Trade.mqh>
CTrade order_1,order_2;
ulong    ticket_1,ticket_2;
//_______________________________________________________________________ 
class CNewbar
  {
private :
   datetime           mnewtime;
   ENUM_TIMEFRAMES    mperiod;
public :
                     CNewbar()                        { mperiod= PERIOD_CURRENT ;  mnewtime= TimeCurrent (); }
                     CNewbar( ENUM_TIMEFRAMES period)  { mperiod=period;          mnewtime= TimeCurrent (); }
   bool               NewBar(){ datetime t= iTime ( NULL ,mperiod, 0 ); if (mnewtime<t){ mnewtime=t; return ( true ); } return ( false );  }
  };
//_______________________________________________________________________ 

CNewbar Bar_H1( PERIOD_H1 );
CNewbar Bar_M30( PERIOD_M30 );
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   order_1.SetExpertMagicNumber(Magic1);
   order_2.SetExpertMagicNumber(Magic2);
   ticket_1 = 0 ;
   ticket_2 = 0 ;
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   if (Bar_H1.NewBar())
     {
      order_1.PositionClose(ticket_1);
       if (order_1.Buy(Lot_1))
        {
         ticket_1=order_1.ResultOrder();
         Print ( "NewBar H1, ticket_1 = " ,ticket_1);
        }
     }

   if (Bar_M30.NewBar())
     {
      order_2.PositionClose(ticket_2);
       if (order_2.Sell(Lot_2))
        {
         ticket_2=order_2.ResultOrder();
         Print ( "NewBar M30, ticket_2 = " ,ticket_2);
        }
     }
  }
//+------------------------------------------------------------------+
 
Igor Makanu :

Teşekkür ederim! anladım zaten

genel olarak sorun bilgi, dedikodu ve fırsatların bolluğundan kaynaklanıyordu .... Result()'daki bileti yakalayamayacağımdan emindim, çünkü bir süre sonra OnTradeTransaction() olayını hatırlamaya başlıyorlar. .. ve gidiyoruz!

şimdi MT5 test cihazıyla ilgileniyorum, yalnızca tekrarlanabilir örneklere ihtiyacımız olsa da, işlevsel koddan bahsetmiyoruz - şimdiye kadar yalnızca bir test cihazı

yardımın için tekrar teşekkürler!

bu kod, test cihazındaki en son siparişlerin biletlerini alabilir:

Evet, ResultOrder'ın yardımıyla bir sipariş bileti alacaksınız.

 
Vladimir Karputov :

Evet, ResultOrder'ın yardımıyla bir sipariş bileti alacaksınız.

Tamam, şimdi bununla ilgili herhangi bir sorun görmüyorum, ancak CTrade kullanırken başka bir sorun çıktı: Ezberlenmiş bir sipariş biletim var, PositionClose(m_ticket) kullanarak bileti kapatabilirim

siparişimin kapalı olup olmadığını nasıl öğrenebilirim, MQL4'te bu basitti: OrderSelect() aracılığıyla bir sipariş seçtim ve eğer (OrderCloseTime()>0) kontrol ettim - kapanış saati 0'a eşit değilse, sipariş kapalı

CTrade SB kullanılarak bir siparişin kapatıldığını nasıl bilebilirim?

 
Igor Makanu :

Tamam, şimdi bununla ilgili herhangi bir sorun görmüyorum, ancak CTrade kullanırken başka bir sorun çıktı: Ezberlenmiş bir sipariş biletim var, PositionClose(m_ticket) kullanarak bileti kapatabilirim

siparişimin kapalı olup olmadığını nasıl öğrenebilirim, MQL4'te bu basitti: OrderSelect() aracılığıyla bir sipariş seçtim ve eğer (OrderCloseTime()>0) kontrol ettim - kapanış saati 0'a eşit değilse, sipariş kapalı

CTrade SB kullanılarak bir siparişin kapatıldığını nasıl bilebilirim?

SİPARİŞİ unutun! Bir pozisyon var!

Ne de olsa hemen sordum: Tam olarak neye ihtiyacınız var: SİPARİŞ, ANLAŞMA veya POZİSYON? Terminolojiyi karıştırmayın. Bir işlem emrinin yürütülmesinden sonra bir POZİSYON belirir! SİPARİŞ DEĞİL!


Bu nedenle, önce ne yaptığınızı ve ne almak istediğinizi kelimelerle tanımlayın. SİPARİŞ yerine "SATIN işlem emri" ve "İşlem SAT emri" kullanın. Sonuç olarak, bir "ALMA pozisyonu" veya "SATIŞ pozisyonu" elde ederiz.

 
Igor Makanu :

Tamam, şimdi bununla ilgili herhangi bir sorun görmüyorum, ancak CTrade kullanırken başka bir sorun çıktı: Ezberlenmiş bir sipariş biletim var, PositionClose(m_ticket) kullanarak bileti kapatabilirim

siparişimin kapalı olup olmadığını nasıl öğrenebilirim, MQL4'te bu basitti: OrderSelect() aracılığıyla bir sipariş seçtim ve eğer (OrderCloseTime()>0) kontrol ettim - kapanış saati 0'a eşit değilse, sipariş kapalı

CTrade SB kullanılarak bir siparişin kapatıldığını nasıl bilebilirim?

Pozisyon biletinin genellikle sipariş biletine karşılık geldiğini hesaba katmazsanız, ancak kesinlikle her zaman olduğu gerçeğini dikkate almazsanız, SB olmadan PositionSelectByTicket işlevini kullanabilirsiniz.

Документация по MQL5: Торговые функции / PositionSelectByTicket
Документация по MQL5: Торговые функции / PositionSelectByTicket
  • www.mql5.com
Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Функция PositionSelectByTicket() копирует данные о позиции в программное окружение, и...
 
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {

Bu gösterge hesaplama kodunun yerine kendi hesaplama formülünüzü koyabilir misiniz?

Örneğin açık/2