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

 
Maxim Kuznetsov :

şöyle bir şey:

string level="Level"+IntegerToString(iTime(_Symbol,iBarShift(OrderCloseTime())); // ид.уровня - по времени бара (!! не по тикету)

if (ObjectFind(level)‌==-1) {

  // гор.вектора нет - видимо первый ордер из закрытых на баре

  // сделать горизонтальную линию‌

  ObjectCreate(0,level,OBJ_TREND,0,OrderCloseTime(),OrderClosePrice(),OrderCloseTime()+PeriodSeconds(_Period)*3,OrderClosePrice);

 // указывающую только вправо‌

  ObjectSetInteger(level,‌OBJPROP_RAY,1);

  ObjectSetInteger(level,OBJPROP_RAYLEFT,0);

‌ // украсить её как-то :-)

 ObjectSetInteger(level,OBJPROP_‌COLOR,....)

 ....‌

} else {

  // гор.уровень есть - значит были ордера закрытые на этом баре

  // по фантазии - обновить метки/корректировать уровень/etc‌

}‌

 int TotalPos=- 1 ;

void start()
 
{
 // остальной код

//--
   if ( OrdersTotal ()!=TotalPos) { // не мучаем каждый тик
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
     if ( OrderSymbol ()== Symbol () && OrderType ()<= 1 ) {
      History();

  
     }
  }}} TotalPos= OrdersTotal (); // запомним количество
//--
}
 
 
 
 void History() {
   string Ticket=( string ) OrderTicket ();
   color col=Red;
   if ( OrderType ()== 0 )col=Blue;
   datetime a= OrderOpenTime ();
   double b= OrderOpenPrice ();
   datetime c= OrderCloseTime ();
   double d= OrderClosePrice ();
   double prSep= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
   double prAll= 0 ;
   int     cn= 0 ;
   string hTicket;
   for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
     if ( OrderSymbol ()== Symbol () && OrderType ()<= 1 ) {
       datetime ct= OrderCloseTime ();
       // 60 секунд разницы между закрытием первой и последней в сетке
       if (c<=ct+ 60 && c>=ct- 60 ) {
        prAll+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
        hTicket=( string ) OrderTicket ();
        cn++;
      }
   }}}
   ObjectCreate (Ticket+ "Open" , OBJ_ARROW , 0 ,a,b);
   ObjectSet (Ticket+ "Open" , OBJPROP_COLOR ,col);
   ObjectSet (Ticket+ "Open" , OBJPROP_ARROWCODE , 1 );
     
   ObjectCreate (Ticket+ "Line" , OBJ_TREND , 0 ,a,b,c,d);
   ObjectSet (Ticket+ "Line" , OBJPROP_COLOR ,col);
   ObjectSet (Ticket+ "Line" , OBJPROP_WIDTH , 1 );
   ObjectSet (Ticket+ "Line" , OBJPROP_STYLE , STYLE_DOT );
   ObjectSet (Ticket+ "Line" , OBJPROP_RAY , 0 );
     
   ObjectCreate (Ticket+ "Close" , OBJ_ARROW , 0 ,c,d);
   ObjectSet (Ticket+ "Close" , OBJPROP_COLOR ,Green);
   ObjectSet (Ticket+ "Close" , OBJPROP_ARROWCODE , 3 );
 
   Ticket=cn> 1 ?hTicket:Ticket;
   ObjectCreate (Ticket+ "Profit" , OBJ_TEXT , 0 ,c,d);
   ObjectSet (Ticket+ "Profit" , OBJPROP_ANCHOR , 0 );
   ObjectSetText (Ticket+ "Profit" , DoubleToString (prAll, 2 ), 10 , "Arial" ,White);
   ObjectSet (Ticket+ "Profit" , OBJPROP_PRICE1 ,d);
   ObjectSet (Ticket+ "Profit" , OBJPROP_TIME1 ,c+ Period ()* 60 * 2 );
}

Düzey arama olarak bir vektör kullanmak doğru değil.... işe yaramaz....((

Ya bir şövalye hamlesi yaparsan?

Bir seviye ararken, zaten rekoru olan bir fiyat seviyesinde karları toplama ilkesini kullanın.

örneğin: burada bir arama yaptık ve karı 60 saniyelik bir gecikmeyle ekledik

 for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
     if ( OrderSymbol ()== Symbol () && OrderType ()<= 1 ) {
       datetime ct= OrderCloseTime ();
       // 60 секунд разницы между закрытием первой и последней в сетке
       if (c<=ct+ 60 && c>=ct- 60 ) {
        prAll+= OrderProfit ()+ OrderCommission ()+ OrderSwap ();
        hTicket=( string ) OrderTicket ();
        cn++;

Ardından, bir giriş bulmanız gerekir:

Seviyedeki eklenen kar sayısı > 1 ise, o zaman bu bizim sıramızdır - bizim seviyemiz, ondan bir ışın çekeriz

 

Selamlar.

Her tıklamada , kendisi tarafından oluşturulan mevcut siparişler arasında dolaşacak ve duruma göre hareket edecek fonksiyonlara sahip olacak bir danışman planlanmıştır.

Sonraki döngülerde onlarla çalışmak için her yeni sipariş için ayrı değişkenleri nasıl oluşturacağımı söyler misiniz? (Sanırım Peremennaja+ticket=12345; gibi bir şey)

 
Andrey Sokolov :

Selamlar.

Her tıklamada , kendisi tarafından oluşturulan mevcut siparişler arasında dolaşacak ve duruma göre hareket edecek fonksiyonlara sahip olacak bir danışman planlanmıştır.

Sonraki döngülerde onlarla çalışmak için her yeni sipariş için ayrı değişkenleri nasıl oluşturacağımı söyler misiniz? (Sanırım Peremennaja+ticket=12345; gibi bir şey)

Bir dizi, hatta bir dizi yapı daha iyidir.
 
Alexey Viktorov :
Bir dizi, hatta bir dizi yapı daha iyidir.

Pardon, daha spesifik olabilir misin?
 
Andrey Sokolov :

Pardon, daha spesifik olabilir misin?


Burada ve burada .

Bir yapı ve yapı türünden bir dizi oluşturulur. Tüm kodların ötesinde.

 struct trade_settings
  {
   double take;         // значения цены фиксации прибыли
   double stop;         // значение цены защитного стопа
   uchar   slippage;     // значение допустимого проскальзывания
  };
//--- создали массив типа trade_settings
trade_settings my_set[];
 // присвоить значение нулевому индексу массива в основном коде
my_set[ 0 ].take = что_то;
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Структуры и, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL4
 

Merhaba.

Lütfen yatay “ ResisL ” çizgisi ile “ TrndLaçısı boyunca trend çizgisinin kesişme noktasını bulmama yardım edin.

TRA
 
Nikolay Fedyay :

Merhaba.

Lütfen yatay “ ResisL ” çizgisi ile “ TrndLaçısı boyunca trend çizgisinin kesişme noktasını bulmama yardım edin.

 //+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect( double left_bar, double left_price, double right_bar, double right_price, double 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);
}
//+------------------------------------------------------------------+
Eğik çizginin iki koordinat noktasını bilmek ve bunları bu fonksiyonun parametreleri olarak eklemek, çıkışta bar_to_search çubuğunda bir noktanın fiyatını alacaksınız. Geriye kalan tek şey, bu işlevi çubuk döngüsünde çağırmak ve kendisine döndürülen değeri yatay çizginin fiyatı ile karşılaştırmaktır. Döngünün son çubuğunda, fonksiyon tarafından döndürülen değer, yatay çizginin fiyatının değerinden düşük veya buna eşitse ve döngünün mevcut çubuğunda, fonksiyon tarafından döndürülen değer, fiyatın fiyatından büyükse. çizgi, daha sonra kesişme noktasının X koordinatları, döngü indeksine karşılık gelen zaman ve Y için - fonksiyon tarafından döndürülen fiyat olacaktır.
 
Artyom Trishkin :

Teşekkür ederim.

Ve çubuklar hala eksikken kesişme noktasını, yani gelecekteki tarihi bulmanız gerekiyorsa, nasıl yapılır.

 
Nikolay Fedyay :

Teşekkür ederim.

Ve çubuklar hala eksikken kesişme noktasını, yani gelecekteki tarihi bulmanız gerekiyorsa, nasıl yapılır.

Bu işlevi denemedim - denemeniz gerekiyor.

 
Artyom Trishkin :

Bu işlevi denemedim - denemeniz gerekiyor.

Lütfen deneyecek zaman bulursanız sonucu paylaşın.

Çünkü ne deneyeceğim konusunda hiçbir fikrim yok
.