[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 207

 
solnce600 :

Beyler, lütfen bana basit bir fikri nasıl kodlayacağımı (muhtemelen koşullu bir operatörde) söyleyin

-eğer anlaşma stop loss ile kapatılmışsa

- zararı durdur fiyatında, başka bir işlem açın

teşekkürler

daha derine inin .
 
Roger :

1. init() işlevinde emir açamazsınız.(Test cihazında çalışmaya devam edecek, ancak demoda çalışmayacak)

2. Emirleri kapattığınızda, yaptığınız gibi tam tersini değil, sondan başa saymanız gerekir.

Cevap için teşekkürler.
Bu durumda, döngü operatörünün çalışması test cihazında incelenmiştir, bu nedenle basitlik için siparişler init() içinde açılır, bu gerçek Uzman Danışmanlarda olmaz.
Sipariş seçim sırasını değiştirmek, gerçekten bir tık içinde kapanmalarına yol açar (program kodu ve testçi günlüğünden alınan rapor aşağıda verilmiştir).
MQL4'te siparişlerle çalışma sırasını seçememeniz bana garip geliyor, nedenini biliyorsanız, lütfen bana söyleyin, çünkü. Expert Advisor mantığına göre emirleri tam açıldıkları sıraya göre kapatacağım.

Samimi olarak. shurkin.

Код программы.

//+------------------------------------------------------------------+
//|                                                     Poligon1.mq4 |
//|                                            21 февраля 2013 года. |
//|Тестирование оператора цикла for.                                 |
//+------------------------------------------------------------------+
#property copyright "21 февраля 2013 года."
#property link       ""
//+------------------------------------------------------------------+
//|Объявленные переменные                                            |
//+------------------------------------------------------------------+
int Mn= 357 ; //Magic number
int i; //Показатель счётчика итераций
double PriTP; //TP серии
int Tick; //Счётчик тиков
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----Установка серии ордеров
OrderSend ( Symbol (),OP_BUY, 0.5 ,Ask, 0 , NormalizeDouble (Bid- 35 * Point , Digits ),
NormalizeDouble (Ask+ 35 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 0 , NormalizeDouble (Bid- 25 * Point , Digits ),
NormalizeDouble (Ask+ 25 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUY, 1.5 ,Ask, 0 , NormalizeDouble (Bid- 15 * Point , Digits ),
NormalizeDouble (Ask+ 15 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUY, 2.5 ,Ask, 0 , NormalizeDouble (Bid- 15 * Point , Digits ),
NormalizeDouble (Ask+ 15 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUY, 3.5 ,Ask, 0 , NormalizeDouble (Bid- 15 * Point , Digits ),
NormalizeDouble (Ask+ 15 * Point , Digits ), NULL ,Mn, 0 , CLR_NONE ); //OP_BUY
OrderSend ( Symbol (),OP_BUYLIMIT, 1 , NormalizeDouble (Ask- 15 * Point , Digits ), 0 ,
NormalizeDouble (Bid- 40 * Point , Digits ), NormalizeDouble (Ask+ 25 * Point , Digits ),
NULL ,Mn, 0 , CLR_NONE ); //OP_BUYLIMIT
OrderSend ( Symbol (),OP_SELLSTOP, 3 , NormalizeDouble (Ask- 30 * Point , Digits ), 0 ,
NormalizeDouble (Bid+ 15 * Point , Digits ), NormalizeDouble (Ask- 75 * Point , Digits ),
NULL ,Mn, 0 , CLR_NONE ); //OP_SELLSTOP
//----
   PriTP=Bid; //PriTP
   Print ( "Кс0:" , " OrdersTotal=" , OrdersTotal ()); //Сообщение
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   Tick++; //Tick
//   Print("Кс1:"," Tick=",Tick);//Сообщение
//----
//   for(i=0;i<OrdersTotal();i++)//Инициализация цикла
   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) //
   {
   Print ( "Кс2:" , " Tick=" ,Tick, " i=" ,i); //Сообщение
   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true ) //Выбор ордера i
    {
   if (OrderSymbol()== Symbol ()) //Символ
     {
   if (OrderMagicNumber()==Mn) //Идентификационное число
      {
   if (OrderType()==OP_BUY && OrderTakeProfit()>PriTP) //Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid, 0 , CLR_NONE ); //Закрытие позиции
       } //Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      } //Закрыто if(OrderMagicNumber()==Mn)
     } //Закрыто if(OrderSymbol()==Symbol()
    } //Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   } //Закрыто for(i=0;i<OrdersTotal();i++)
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+ 
Записи в журнале тестера.

2013.03 . 08 13 : 28 : 19      Poligon1 EURUSD,M15: removed
2013.03 . 08 10 : 14 : 14      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick= 3 i= 0
2013.03 . 08 10 : 14 : 14      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick = 3 i= 1
2013.03 . 08 10 : 13 : 50      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick= 2 i= 0
2013.03 . 08 10 : 13 : 50      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick = 2 i= 1
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 at price 1.3395
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick= 1 i= 0
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 at price 1.3395
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick= 1 i= 1
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick= 1 i= 2
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick= 1 i= 3
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: close # 5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick= 1 i= 4
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick= 1 i= 5
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 2 : Tick = 1 i= 6
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: Кс 0 : OrdersTotal = 7
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 7 sell stop 3.00 EURUSD at 1.3367 sl: 1.3410 tp: 1.3322 ok
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 6 buy limit 1.00 EURUSD at 1.3382 sl: 1.3355 tp: 1.3422 ok
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 ok
2013.03 . 08 10 : 13 : 26      2013.02 . 11 12 : 15   Poligon1 EURUSD,M15: open # 1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 ok
2013.03 . 08 10 : 13 : 26      Poligon1 test started
2013.03 . 08 10 : 13 : 24      Poligon1 EURUSD,M15: loaded successfully

 
Değerli bilgileriniz için çok teşekkür ederim, gelecekte bana söylediğiniz her şeyi kesinlikle dikkate almaya çalışacağım.
 
borilunad :

Açamadığınız zararı durdur fiyatındadır, ancak koşulu aynı veya ters yönde açılacak şekilde ayarlayabilirsiniz!

İşte Kim'den bir koşul koyabileceğiniz "Faydalı İşlevler"den bir işlev çağrısı:

isCloseLastPosByStop - Durdurarak son pozisyonu kapatmak için bayrağı döndürür

if(isCloseLastPosByStop() == 0) veya ... == 1) ve ne istersen.....

İşlevi burada bulabilirsiniz: https://www.mql5.com/en/forum/131859

Ve başlangıcın dışına koy!

Ve ciddi bir istek! Tüm bunları titizlikle, doğrulukla ve sabırla kendiniz yapabilirsiniz, aksi takdirde istemlerden hiçbir şey öğrenemezsiniz!

Bilgi ancak sizin tarafınızdan yeterli çabayla elde edilir! Günlük meraklı çalışmaya girin! İyi şanlar!


Değerli bilgileriniz için çok teşekkür ederim, gelecekte bana söylediğiniz her şeyi kesinlikle dikkate almaya çalışacağım.
 

Güzel gün.

Lütfen bana, DC'lerin siparişe yapılan yorumları değiştirebileceği veya silebileceği durumlar olup olmadığını söyleyin?

Şimdiden teşekkürler.

 
Gek34 :

Lütfen DC'lerin siparişe yapılan yorumları değiştirebileceği veya silebileceği durumlar olup olmadığını söyleyin?...

Örneğin.
yerli yorum
e121220_3in1 01

Devreden sonra DC eki ile

e121220_3in1 01 [takas]

Yani, yoruma göre bir sıralama arıyorsanız, önce "yerel" yorum satırının uzunluğunu belirlemelisiniz ve arama yaparken, değiştirilmiş yorumun ilgili uzunluktaki yalnızca ilk bölümünü kontrol etmelisiniz. Veya kontrol edilen yorumda yerel bir dizenin oluşumunu kontrol etmek için.

 

Shurkin :

Cevap için teşekkürler.
Bu durumda, döngü operatörünün çalışması test cihazında incelenmiştir, bu nedenle basitlik için siparişler init() içinde açılır, bu gerçek Uzman Danışmanlarda olmaz.
Sipariş seçim sırasını değiştirmek, gerçekten bir tık içinde kapanmalarına yol açar (program kodu ve testçi günlüğünden alınan rapor aşağıda verilmiştir).
MQL4'te siparişlerle çalışma sırasını seçememeniz bana garip geliyor, nedenini biliyorsanız, lütfen bana söyleyin, çünkü. Expert Advisor mantığına göre emirleri tam açıldıkları sıraya göre kapatacağım.

Samimi olarak. shurkin.



Mantık doğrudur - emirler, olduğu kadar çok pozisyon numarasına sahip olmalıdır, biri kapanır kapanmaz geri kalan her şey yeniden hesaplanır. Bu tasarımı dene

 for (i= 0 , int k= 0 ; i< OrdersTotal ();i++,k++) //
   {
   Print ( "Кс2:" , " Tick=" ,Tick, " i=" ,i); //Сообщение
   if ( OrderSelect (k,SELECT_BY_POS,MODE_TRADES)== true ) //Выбор ордера i
    {
   if (OrderSymbol()== Symbol ()) //Символ
     {
   if (OrderMagicNumber()==Mn) //Идентификационное число
      {
   if (OrderType()==OP_BUY && OrderTakeProfit()>PriTP) //Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid, 0 , CLR_NONE ); //Закрытие позиции
   k--;
       } //Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      } //Закрыто if(OrderMagicNumber()==Mn)
     } //Закрыто if(OrderSymbol()==Symbol()
    } //Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   } //Закрыто for(i=0;i<OrdersTotal();i++)
 
Gek34 :

Güzel gün.

Lütfen bana, DC'lerin siparişe yapılan yorumları değiştirebileceği veya silebileceği durumlar olup olmadığını söyleyin?

Şimdiden teşekkürler.


Sipariş yorumunda tam bir değişiklik oldu. Ayrıca, kısmen kapanırken, büyü bazen sıfırlanır (kısmi kapanma sunucu tarafından başlatılır). Şimdi, ikincisini kontrol etmek için, "yabancı" siparişleri ve diğer tutarsızlıkları kontrol eden ve Push mesajlarını zamanında bildiren ayrı, döngülü bir Uzman Danışman askıda kalıyor.
 

Lütfen bana koşulu nasıl yazacağımı söyle:

1.if sipariş sembolü = sembol ve sipariş büyüsü = 135

2. eğer bekleyen emir yoksa BYTOP

3. açık emir yoksa AL VEYA (varsa) zararı durdur>açık fiyatlar

4.Fiyat MA arasındaysa ve yukarı fraktal varsa

BEKLEMEDEKİ ALIM DURDURMA SİPARİŞİ VERİN

BU KADAR YAZILI:

 static bool flag ;

   if (NewBar()== true )

     flag = true ; 

     for ( int i= 0 ;i<total- 1 ;i++) 

         {

         OrderSelect (i,SELECT_BY_POS); 

           if (OrderSymbol()== Symbol () && OrderMagicNumber()== 135 ) 

          { 

           if (OrderType()<=OP_BUYSTOP) 

           {

           if ((OrderType()<=OP_BUY) || (OrderType()==OP_BUY && OrderStopLoss()>OrderOpenPrice()))  

            { 

             if (Ask<m && Ask>ma && frUP> 0 && flag)

            {

               double price = NormalizeDouble (frUP+ 30 * Point +(Ask-Bid)* Point , Digits );

             double stoploss = NormalizeDouble (price-sl* Point - 30 * Point , Digits );

             double takeprofit = NormalizeDouble (price+tp* Point , Digits );

             int ticket = OrderSend ( Symbol (),OP_BUYSTOP,Lots,price, 5 ,stoploss,takeprofit, "R" , 135 , TimeCurrent ()+ 55000 ,Blue);

             if (ticket> 0 )

               {

               Alert ( "R!Отложенный ордер BUYSTOP!!! " , Symbol ());

               flag = false ;

               }

               else

               {

               Print ( "Lots= " , Lots, "price= " , price, "stoploss= " , stoploss, "takeprofit= " , takeprofit, "Ошибка № " , GetLastError ());      

               return ;

               }

             }

           }

         }

       }

     } 

ÇALIŞMIYOR! LÜTFEN HATA NE OLDUĞUNU SÖYLEYİN!

 

Lütfen bana aşağıdaki soruna neyin neden olabileceğini söyleyin.

Harici işlevleri kullanan bir gösterge vardır. Derlenen kitaplığın kodu kitaplıklar klasöründe bulunur, tanımlayıcılar dahil edilir.

Bağlantı #include <lib_Zemckikh.mqh>. Göstergenin ilk hesaplanmasında, tüm kütüphane işlevleri normal çalışır, gösterge grafikte görüntülenir. Parametreleri değiştirirseniz (göstergeyi yeniden hesaplamaya zorlarsanız), hiçbir kütüphane işlevi çağrılmaz, gösterge görüntülenmez, parametreleri değiştirdikten sonra "Uzmanlar" sekmesinde hiçbir giriş yoktur.

Kitaplık bağlantısını kaldırır ve gerekli işlevleri gösterge dosyasına yerleştirirseniz (işlevlerle hemen derleyin), her şey normal şekilde çalışır.

Neyin yanlış olduğunu anlayamıyorum. Forumu tıkamamak için kod uygulamıyorum. Gerekirse, kişisel olarak bırakacağım.

Neden: