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

 
Forexman77 :


Tünaydın!

Nispeten eski bir konuyu gündeme getirdiğim için özür dilerim. Kodla her şey netleşti.

Şimdi bir ticaretin nasıl açılacağı konusunda bir engelim var. Örneğin, verilen aralıktan hemen sonra arıyoruz

fiyat, belirli sayıda puanla maksimumdan daha azdır. Bir anlaşmaya giriyoruz.

Bu kodu ekleyip test cihazında çalıştırmayı denedim, fırsatlar açılmıyor.

Nasıl olunur?

Bu şekilde çalışması gerekir, çünkü kendim kontrol etmedim. terminal şu anda başka bir EA'yı optimize etmekle meşgul

 #define magic 123456789
extern int StartHour= 16 ;
extern int StartMinute= 1 ;
extern int StopHour= 17 ;
extern int StopMinute= 59 ;
bool Flag= true ; // Флаг разрешения открытия позиции, чтобы не плодить бесконечное число ордеров
double lots= 0.1 ; // размер лота
double sl= 100 ;   // стоплосс в пунктах
double tp= 100 ;   // тейкпрофит в пунктах
int ticket=- 1 ;
int OldBar;
int init() {
 sl= NormalizeDouble (sl* Point , Digits ); //стоплосс в поинтах
 tp= NormalizeDouble (tp* Point , Digits ); //тейкпрофит в поинтах
 return ( 0 );}
int deinit() { return ( 0 );}
int start(){
 static double Maximum=- 1 ;
 int StartTime=StartHour* 60 +StartMinute;
 int StopTime=StopHour* 60 +StopMinute;
 if (StopTime<=StartTime) { Print ( "ERROR: Неправильные времена" ); return ( 0 );}
 int CurrentMinutesFromDayStart=Hour()* 60 +Minute(); // Текущее время в минутах от начала дня
 datetime td=iTime( Symbol (), PERIOD_D1 , 0 ); // Время открытия дневного бара в секундах от 01.01.1970
 if (CurrentMinutesFromDayStart<StartTime) {Maximum=- 1 ;Flag= true ;} // Если StartTime еще не настало, то после StopTime нужно пересчитать Maximum и можно открывать ордер
// В 22:55 Принудительно закрываем ордер
 if (CurrentMinutesFromDayStart> 22 * 60 + 55 && ticket>= 0 ) if ( OrderSelect (ticket,SELECT_BY_TICKET)) if (OrderCloseTime()== 0 ) if (OrderClose(ticket,OrderLots(),Ask, 30 ,Magenta)) ticket=- 1 ;
 if (CurrentMinutesFromDayStart>StopTime && Maximum< 0 ) { // если максимум ещё не посчитан
   datetime ts=td+StartTime* 60 ; // начало временного диапазона в секундах от 01.01.1970
   int start= iBarShift( Symbol (), PERIOD_M1 ,ts, false ); // смещение бара, которому принадлежит ts
  ts=td+StopTime* 60 ; // конец временного диапазона в секундах от 01.01.1970
   int count= iBarShift( Symbol (), PERIOD_M1 ,ts, false ); // смещение бара, которому принадлежит ts
  count=start-count; // Сколко баров длится временной интервал
  Maximum=iHigh( Symbol (), PERIOD_M1 ,iHighest( Symbol (), PERIOD_M1 ,MODE_HIGH,count,start)); //Находим максимум на заданном временном интервале
 }
 if (Maximum> 0 && Flag) {
   double signal = Maximum - Bid;
   if (signal- 12 * Point > 0.0 ) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL                                       
   ticket= OrderSend ( Symbol (),OP_SELL,lots,Bid, 30 ,Ask+sl,Ask-tp, "My order" ,magic, 0 ,Blue);
   if (ticket>= 0 ) Flag= false ; // Ордер открылся, сегодня больше не открываем.         
  }
 }
 return ( 0 );
}
 
Sepulca :

Bu şekilde çalışması gerekir, çünkü kendim kontrol etmedim. terminal şu anda başka bir EA'yı optimize etmekle meşgul

Teşekkür ederim!
 
Sepulca :

Bu şekilde çalışması gerekir, çünkü kendim kontrol etmedim. terminal şu anda başka bir EA'yı optimize etmekle meşgul


 // В 22:55 Принудительно закрываем ордер
 if (CurrentMinutesFromDayStart> 22 * 60 + 55 && ticket>= 0 ) if ( OrderSelect (ticket,SELECT_BY_TICKET)) if (OrderCloseTime()== 0 ) if (OrderClose(ticket,OrderLots(),Ask,
   30 ,Magenta)) ticket=- 1 ;
Bu hat kaldırılabilir mi yoksa onsuz çalışmaz mı? Siparişi neden kapattığını anlayamıyorum?
 
Forexman77 :

Bu hat kaldırılabilir mi yoksa onsuz çalışmaz mı? Siparişi neden kapattığını anlayamıyorum?

Tabii ki, bunu kaldırabilirsiniz, bu sadece test etmek ve çok fazla açık sipariş üretmemek içindir. Bu sadece bir Uzman Danışmanın öğretici bir örneğidir . Günde birden fazla SATIŞ emri açmaz. Ve Uzman Danışmanınızda, emirleri nasıl kapatacağınıza karar vermelisiniz: zararı durdur veya kârı al veya diğer koşullar. Saat 22:55 seçildi çünkü birçok DC için, özellikle Cuma günü 23:00'ten sonra, yayılma keskin bir şekilde artıyor. Günde birden fazla sipariş açmayı düşünebilirsiniz. Ve bu tek yönlü bir sipariş için bir örnektir. Analojiyle, minimumu aramanız gerekir. Bu kod bir örnektir, umarım kendi danışmanınızı oluşturmanızı kolaylaştırır)
 

Merhaba!

Ben bir çaydanlığım ama en azından koddaki bir şeyi kendim değiştirmek istiyorum ...

Zamanına kim üzülmez söyle...

Birkaç sorum var:

1. Bir EA nasıl bir "kaybı durdur" değişkeni ekleyebilir? Eh, elbette değiştirilebilir.

2. Danışmanın her işlemine bir yorum eklemesi için nereye bir şey yazmalıyım?

3. Bir danışmana sihirli bir sayı nasıl eklenir?

 
Kot :

Merhaba!

Ben bir çaydanlığım ama en azından koddaki bir şeyi kendim değiştirmek istiyorum ...

Zamanına kim üzülmez söyle...

Birkaç sorum var:

1. Bir EA nasıl bir "kaybı durdur" değişkeni ekleyebilir? Eh, elbette değiştirilebilir.

2. Danışmanın her işlemine bir yorum eklemesi için neyi nereye yazmalı?

3. Bir danışmana sihirli bir sayı nasıl eklenir?

1. harici çift StopLoss =100.0;// "stoploss" değişkeni eklendi

2-3. int bilet=OrderSend(Symbol, TypeOfOrder,LotsOfOrder, OpenPriceOfOrder, Slippage, OpenPriceOfOrder+/-StopLoss , OpenPriceOfOrder-/+TakeProfit, "Sipariş yorumunuz" , YourMagicNumber , 0, CLR_NONE) ;

4. OKUYUN!

 
artmedia70 :

İşte ortak:

 for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderType() > 1 ) continue ;               // Все удалённые отложки нас не интересуют.. 
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
       if ( MathAbs (OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return ( 0 ); // ЗДЕСЬ ВЫХОДИМ ПРИ ПЕРВОМ ВСТРЕЧНОМ
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
Aslında evet, sabah taze bir kafaya baktım. Burada, gereğinden fazla karı olan ilk emrin, fonksiyonun yürütülmesine devam etmek için bir sinyal verdiği (yani, atlanmadığı) ve sonra her şeyin yanlış olacağı ortaya çıkıyor.
 

Tünaydın!

Expert Advisor'ın optimizasyonunu , geçişin olumsuz sonuçlarını da gösterecek şekilde nasıl ayarlayacağımı söyler misiniz?

 
filpan :

Tünaydın!

Uzman Danışman optimizasyonunu geçişin olumsuz sonuçlarını da gösterecek şekilde nasıl ayarlayacağımı söyler misiniz?

Optimizasyon sonuçlarının bulunduğu sekmede, herhangi bir sonuca sağ tıklayın ve "işe yaramaz sonuçları gösterme" (veya buna benzer bir şey) seçeneğinin işaretini kaldırın.
 
Buldum, teşekkürler!
Neden: