Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 446

 

Canım, yardıma ihtiyacım var.

Muhasebe, açılış ve kapanış emirlerinin kodunu ders kitabından (tradingexpert.mq4) aldım. Kod, tek bir konumla çalışmak üzere tasarlanmıştır. Beş pozisyon olmalı.

Kodu biraz değiştirdikten sonra, pozisyonların gerekli miktarda açıldığı, ancak değiştirilirken sadece bir pozisyon kapatıldığı ve zıt pozisyonun hemen olduğu şekilde (değiştirilen satırlar koyu renkle vurgulanmıştır) yapıldığı ortaya çıktı. açıldı.

Bir geri dönüş sırasında tüm pozisyonların kapanması ve ardından sadece karşı pozisyonun açılması için nasıl yapılır?

   // Учёт ордеров
   Symb= Symbol ();                               // Название фин.инстр.
   Total= 0 ;                                     // Количество ордеров
   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер
     {
       if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий
        {                                       // Анализ ордеров:
         if ( OrderSymbol ()!=Symb) continue ;       // Не наш фин. инструм
         if ( OrderType ()> 1 )                     // Попался отложенный
           {
             Alert ( "Обнаружен отложенный ордер. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total> 5 )                           // Было не более одного орд, стало не более пяти
           {
             Alert ( "Несколько рыночных ордеров. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Ticket= OrderTicket ();                   // Номер выбранн. орд.
         Tip   = OrderType ();                     // Тип выбранного орд.
         Price = OrderOpenPrice ();               // Цена выбранн. орд.
         SL    = OrderStopLoss ();                 // SL выбранного орд.
         TP    = OrderTakeProfit ();               // TP выбранного орд.
         Lot   = OrderLots ();                     // Количество лотов
        }
     }
   // Открытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Total < 5 && Opn_B== true )     // Открытых орд. нет +. Было Total < 1, стало Total < 5
        {                                       // критерий откр. Buy
         RefreshRates ();                         // Обновление данных
         SL= Bid - New_Stop(StopLoss)* Point ;     // Вычисление SL откр.
         TP= Bid + New_Stop(TakeProfit)* Point ;   // Вычисление TP откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb, OP_BUY ,Lts, Ask , 2 ,SL,TP); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
   // Закрытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Tip== 0 && Cls_B== true )                 // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert ( "Попытка закрыть Buy " ,Ticket, ". Ожидание ответа.." );
         RefreshRates ();                         // Обновление данных
         Ans= OrderClose (Ticket,Lot, Bid , 2 );       // Закрытие Buy
         if (Ans== true )                         // Получилось :)
           {
             Alert ( "Закрыт ордер Buy " ,Ticket);
             break ;                               // Выход из цикла закр
           }
         if (Fun_Error(GetLastError())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
 
Forexman77 :

Canım, yardıma ihtiyacım var.

Muhasebe, açılış ve kapanış emirlerinin kodunu ders kitabından (tradingexpert.mq4) aldım. Kod, tek bir konumla çalışmak üzere tasarlanmıştır. Beş pozisyon olmalı.

Kodu biraz değiştirdikten sonra, pozisyonların gerekli miktarda açıldığı, ancak değiştirilirken sadece bir pozisyon kapatıldığı ve zıt pozisyonun hemen olduğu şekilde (değiştirilen satırlar koyu renkle vurgulanmıştır) yapıldığı ortaya çıktı. açıldı.

Bir geri dönüş sırasında tüm pozisyonların kapanması ve ardından sadece karşı pozisyonun açılması için nasıl yapılır?


Ticket'ı bir Ticket[5] dizisi yapın, 5 biletin hepsini içinde saklayın. Kapatırken, sırasıyla tüm biletler için bir döngü.
 
Vinin :

Kütüphanelerin kullanım düzeyine göre, yeni başlayanlarla ilişki kuramazsınız. Koduna baktım, çözmem için iki haftaya ihtiyacım var. Daha fazla değilse. Bu yüzden bir cevap alacağınızı sanmıyorum.
Vitya, burada hiçbir şey anlamanıza gerek yok - bir kişi bir "korumalı alandan" (kütüphaneleriyle EA) global değişkenlerin başka bir "korumalı alanda" (derlenmiş kitaplık) görünmesini istiyor. :)))
 

Sevgili, senden eleştirmeni değil, sadece yardım etmeni ve önermeni istiyorum. Ben havalı bir proger değilim, kod toplayıcıyım.Bu yüzden bir gösterge oluşturdum (bir dosya değil bir metin düzeni yapabileceğinizi görüyorum t-bunu daha kolay algılama için yapacağım-

 #property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
{
SetIndexStyle ( 0 , DRAW_HISTOGRAM , EMPTY , 2 );
SetIndexBuffer ( 0 ,Buffer);
return ( 0 );
}
// -------------------------------------------------------------------

int deinit()
{
return ( 0 );
}
//--------------------------------------------------------------------

int start()
{
int StartBar = Bars - IndicatorCounted () - 1 ;
for ( int i = StartBar; i >= 0 ; i--)
{
if ( TimeDayOfWeek ( Time [i]) < TimeDayOfWeek ( Time [i+ 1 ]))
Buffer[i] = 0 ;
else
Buffer[i] = Buffer[i+ 1 ];
if ( Close [i]> Close [i+ 1 ]&& Close [i+ 1 ]>= Close [i+ 2 ]){ //если текущее и преддыдущее движение растут
Buffer[i] += NormalizeDouble (( Close [i] - Close [i+ 1 ])/ Point , 0 );}
if ( Close [i]< Close [i+ 1 ]&& Close [i+ 1 ]< Close [i+ 2 ]){ //если текущее и преддыдущее движение падают
Buffer[i] += NormalizeDouble (( Close [i+ 1 ] - Close [i])/ Point , 0 );}
if ( Close [i]> Close [i+ 1 ]&& Close [i+ 1 ]< Close [i+ 2 ]){ //если текущее лвижение растет а предыдущее падает
Buffer[i] += NormalizeDouble (( Close [i+ 1 ] - Close [i])/ Point , 0 );}
if ( Close [i]< Close [i+ 1 ]&& Close [i+ 1 ]>= Close [i+ 2 ]){ //если текущее движение падает а предыдущее растет
Buffer[i] += NormalizeDouble (( Close [i] - Close [i+ 1 ])/ Point , 0 );}
}
return ( 0 );
}
//--------------------------------------------------------------------

Hafta boyunca noktaların toplamını ve bunların toplamlarının dinamiklerini gösterir - daha küçük zaman dilimlerinde, eğer Kapat[i+2]'den Kapat[i+1]'e önceki hareketi devam ettirirse, o zaman mevcut Kapat[i] hareketi artı, eğer buna karşıysa, eksidir. haftanın başlangıcı sıfırdan bir başlangıç sağlar - haftanın sonunda döngü biter. yeniden çizilmez. programın Cuma kapanışını görmesi için kavramın yerine bir şekilde reçete yazmak gerekiyor - barın kapanması - böylece DayOfWeek ve 5 sayısı (Cuma'nın numarası) kullanılarak yapılabileceğini anlıyorum, ancak bu nasıl olabilir? pratik olarak yapıldı mı? Yardım.

 
TarasBY :
Vitya, burada hiçbir şey anlamanıza gerek yok - bir kişi bir "korumalı alandan" (kütüphaneleriyle EA) global değişkenlerin başka bir "korumalı alanda" (derlenmiş kitaplık) görünmesini istiyor. :)))

Igor, biraz yanlış! "Korumalı alanda" (derlenmiş kitaplık) yalnızca işlevler vardır ve tüm değişkenler dahil etmede bildirilir. Ve içerme dosyasında (dahil edilen dosya) bildirilen değişkenler baykuşta görünür olmalıdır, çünkü içermeyi doğrudan baykuşa ekledim. katılmıyor musun?
 
Vitek2010 :

Sevgili, senden eleştirmeni değil, sadece yardım etmeni ve önermeni istiyorum. Ben havalı bir proger değilim, ama bir kod toplayıcıyım.Bu yüzden bir gösterge topladım (bir dosya değil bir metin düzeni yapabileceğinizi görüyorum t-bunu daha kolay algılama için yapacağım-

Hafta boyunca noktaların toplamını ve bunların toplamlarının dinamiklerini gösterir - daha küçük zaman dilimlerinde, eğer Kapat[i+2]'den Kapat[i+1]'e önceki hareketi devam ettirirse, o zaman mevcut Kapat[i] hareketi artı, eğer buna karşıysa, eksidir. haftanın başlangıcı sıfırdan bir başlangıç sağlar - haftanın sonunda döngü biter. yeniden çizilmez. programın Cuma kapanışını görmesi için kavramın yerine bir şekilde reçete yazmak gerekiyor - barın kapanması - böylece DayOfWeek ve 5 sayısı (Cuma'nın numarası) kullanılarak yapılabileceğini anlıyorum, ancak bu nasıl olabilir? pratik olarak yapıldı mı? Yardım.


Öyle mi yapacak?

 //+------------------------------------------------------------------+
//|                                                    Vitek2010.mq4 |
//|                                            Copyright 2014, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Vinin"
#property link        "vinin@mail.ru"
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
  {
   SetIndexStyle ( 0 , DRAW_HISTOGRAM , EMPTY , 2 );
   SetIndexBuffer ( 0 ,Buffer);
   return ( 0 );
  }
// -------------------------------------------------------------------

int deinit()
  {
   return ( 0 );
  }
//--------------------------------------------------------------------

int start()
  {
   int StartBar= Bars - IndicatorCounted ()- 1 ;
   if (StartBar> 1 ) StartBar--;
   
   for ( int i=StartBar; i>= 0 ; i--)
     {
      Buffer[i]=Buffer[i+ 1 ];
       int pos0= iBarShift ( NULL , PERIOD_W1 , Time [i]);
       int pos1= iBarShift ( NULL , PERIOD_W1 , Time [i+ 1 ]);
       if (pos0==pos1) 
         Buffer[i]+= MathAbs ( Close [i]- Close [i+ 1 ]);
       else 
         Buffer[i]= MathAbs ( Close [i]- Close [i+ 1 ]);
     }
   return ( 0 );
  }
//--------------------------------------------------------------------
 
hoz :

Igor, biraz yanlış! "Korumalı alanda" (derlenmiş kitaplık) yalnızca işlevler vardır ve tüm değişkenler dahil etmede bildirilir. Ve içerme dosyasında (dahil edilen dosya) bildirilen değişkenler baykuşta görünür olmalıdır, çünkü içermeyi doğrudan baykuşa ekledim. katılmıyor musun?
ve sonra derlenmiş kitaplık hakkında bir söz ne zaman?
 
Vinin :


Öyle mi yapacak?

Hayır, olmayacak. Açıklayacağım - forumunuz progerlerin son okuryazar kalesi için bir umut gibidir. ve bir boyut eklemek - bu yazımın gördüğü tam olarak budur PERIOD_W1 ancak ne boyut kullanımı ne de tarih biçimindeki sabit referans noktalarının kullanımı istenen herhangi bir etkiye sahip değildir. bu yüzden belirli bir kavramı eklemek için belirli bir soru yazdım - Cuma günleri - bu arada, kodunuz derlenmiyor, 'sürüm' diyor - bilinmeyen özellik ( "sürüm" - bilinmeyen bir özellik) yani nasıl olduğunu bilmiyorsanız DayOfWeek ve 5 (Cuma numarası) sayılarını buna diğer seçenekleri verdiğim kodun eklenmesi yardımcı olmaz .
 
Vitek2010 :
Hayır, olmayacak. Açıklayacağım - forumunuz progerlerin son okuryazar kalesi için bir umut gibidir. ve bir boyut eklemek - bu yazım tam olarak böyle görüyor PERIOD_W1 ancak ne boyut kullanımı ne de tarih biçimindeki sabit referans noktalarının kullanımı istenen herhangi bir etkiye sahip değildir. bu yüzden belirli bir kavramı eklemek için belirli bir soru yazdım - Cuma günleri - bu arada, kodunuz derlenmiyor, 'sürüm' diyor - bilinmeyen özellik ( "sürüm" - bilinmeyen bir özellik) yani nasıl olduğunu bilmiyorsanız DayOfWeek ve 5 (Cuma numarası) sayılarını buna diğer seçenekleri verdiğim kodun eklenmesi yardımcı olmaz .

TimeDayOfWeek ( Time [i]), Time[i]'yi hiç belirtmez, ancak D'2014.01.27' biçiminde belirli bir tarihi belirtir.

Ve hangi gün olduğunu belirlemeniz gerekiyorsa, DayOfWeek () öğesini aramanız yeterlidir.

 
evillive :

TimeDayOfWeek ( Time [i]), Time[i]'yi hiç belirtmez, ancak D'2014.01.27' biçiminde belirli bir tarihi belirtir.

Ve hangi gün olduğunu belirlemeniz gerekiyorsa, DayOfWeek () öğesini aramanız yeterlidir.

Ve bunu TimeDayOfWeek () (örnekte) hakkında nerede okudunuz ??? :)))