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

 
artmedia70 :
Igor Kim'in belirli bir zaman aralığından sonra bir danışmanı var.


Teşekkür ederim!
 

Merhaba.

Bekleyen siparişlerle, özellikle de son kullanma tarihiyle ilgili sorun.

   ticket= OrderSend (symb, OP_SELLLIMIT, Lots, price, Slippage, 0 , 0 , lsComm, mn, TimeCurrent () + 60 * 60 , op_color);

Bu şekilde yeni bir sipariş açılır, yani bir saat içinde çalışmadıysa, sunucu onu kapatmalıdır.

Ardından, son kullanma tarihinin ne olduğunu kontrol ediyorum:

   if (ticket> 0 )
   {
     OrderSelect (ticket, SELECT_BY_TICKET);
     Alert ( "OrderExpiration = " , TimeToStr(OrderExpiration(), TIME_DATE), ":" ,TimeToStr(OrderExpiration(), TIME_MINUTES)); 
.......
   } 

Expert Advisor test cihazında çalıştığında elde ettiğim sonuçlar:

2013.03.01 12:45:58 2012.01.11 11:00 #EA# EURUSD,H1: açık #1 satış limiti 2.00 EURUSD 1.27972'de tamam
2013.03.01 12:45:58 2012.01.11 11:00 #EA# EURUSD,H1: Uyarı: SiparişSon kullanma = 2012.01.11:12:00
2013.03.01 12:45:58 2012.01.12 16:29 Test eden: 1. sipariş, 2.00 EURUSD sat 1.27972'de açıldı

Yani son kullanma tarihi ve saati benim istediğim gibi doğru ayarlanmış ancak vade sonuna kadar kapanma yok - bir günden fazla süre içinde bir pozisyon açılıyor.

Zaten birkaç forum aradım, sorun ortaya çıkıyor. Olağan cevap "benim için çalışıyor" veya "monitör beklemede" şeklindedir. Her iki cevap da uymuyor, kendim izlemek istemiyorum ve benim için çalışmıyor.

 
artmedia70 :
Igor Kim'in belirli bir zaman aralığından sonra bir danışmanı var.

Harika çalışıyor.

Bahşiş için teşekkürler!

 
DhP :

Harika çalışıyor.

Bahşiş için teşekkürler!


Ben değil, Google.

Sanırım ekran kaydetme işlevini oradan kendiniz çıkarıyorsunuz ve onu çağırmak için kendi parametrelerinizi ayarladınız - çok tembeldim ...

 
borilunad :
Sergey! Şimdilik fonksiyon sorusunu açık bırakıyorum, çünkü Yarın saf bir deney yapmak için test EA'nıza birkaç fonksiyon daha ekleyeceğim. Görsel modda izledim ve neredeyse her zaman çift kapanma en son oluyor, daha önce SL ve TP tarafından kapatılıyorlar, yani. seçim için hiçbir şey. Aralarından seçim yapabileceğiniz çok şey olması için Ayaklar ve Teiki kaldırıldı. Yarın danışmanınıza tüm ek işlevleri ve yorumları göstereceğim! İşlevin nasıl çalıştığını kendiniz görebilirsiniz. Gerçekten yanıldığımı göstermek istiyorum! Eğer haklıysam, istediğimi elde etmeye çalışacağım! Yarına kadar!

Sergey, Dubakin , günaydın (benim için) ve iyi günler (sizin için)! Görsel bir kontrol yaptım ve bu fonksiyonun maksimumları seçtiğinden emin oldum, ki bu da ihtiyacım olan şeydi! Artık şüphem olmadığına sevindim ve senden özür dilerim! Ancak bizim işimizde "yedi kez ölçmek daha iyidir..." Test cihazınıza, daha net bir görsel kontrol için ek işlevler ve yorumlarla birlikte işlevi test etmesi için EA'yı gösteriyorum! Teşekkür ederim!

 extern int EA_Magic= 135 ; // внешняя переменная

int TimeNow, TimePrev, PrevType; // глобальные переменные

int start()
{
   double Price,SL,TP;
     int Ticket;

  TimeNow=iTime( NULL , 240 , 0 );
   if (TimePrev==TimeNow) return ( 0 );

   if (PrevType!= 1 ) {
   Price= NormalizeDouble (Ask, Digits );    
//   SL=NormalizeDouble(Price-300*Point,Digits);    
//   TP=NormalizeDouble(Price+300*Point,Digits);
   Ticket= OrderSend ( Symbol (),OP_BUY, 0.1 ,Price, 3 , 0 , 0 , "" ,EA_Magic);
   if (Ticket!=- 1 ) { TimePrev=TimeNow; PrevType= 1 ; } }

   else if (PrevType!=- 1 ) {
   Price= NormalizeDouble (Bid, Digits );    
//   SL=NormalizeDouble(Price+300*Point,Digits);    
//   TP=NormalizeDouble(Price-300*Point,Digits);
   Ticket= OrderSend ( Symbol (),OP_SELL, 0.1 ,Price, 3 , 0 , 0 , "" ,EA_Magic);
   if (Ticket!=- 1 ) { TimePrev=TimeNow; PrevType=- 1 ; } }

   Comment ( "BuyPos: " ,NumberOfBuyPositions(), "; SellPos: " ,NumberOfSellPositions(),
  "; LotPos: " ,GetAmountLotFromOpenPos(),
   "\nMaxLoss: " ,DoubleToStr(GetMinProfit(), 2 ), "; MaxProf: " ,DoubleToStr(GetMaxProfit(), 2 ),
   "\nLossDiff: " ,DoubleToStr(GetMinProfit()+GetMaxProfit(), 2 ));

   if (Hour()== 0 && TimePrev==TimeNow) LockOFF(EA_Magic);

   return ( 0 );
}

bool LockOFF( int EA_Magic) {
   double Result, PrevLoss, PrevProfit;
     int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
     bool Ans;

  MaxProfitTicket=- 1 ; MaxLossTicket=- 1 ;

  orders_total= OrdersTotal ();
   for (pos=orders_total- 1 ; pos>= 0 ; pos--) {
     if (! OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) continue ;
     if (OrderSymbol()!= Symbol () || OrderMagicNumber()!=EA_Magic) continue ; // не наш ордер
     if (OrderType()> 1 ) continue ;
    Result=OrderProfit()+OrderSwap()+OrderCommission();
     if (Result< 0.0 && (PrevLoss== 0.0 || Result<PrevLoss)) {
      PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType();   // end of for
  } }
   if (MaxLossTicket==- 1 ) return ( false ); // нет убыточной позиции
   if (order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY; 

  orders_total= OrdersTotal ();
   for (pos=orders_total- 1 ; pos>= 0 ; pos--) {
     if (! OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) continue ;
     if (OrderSymbol()!= Symbol () || OrderMagicNumber()!=EA_Magic) continue ; // не наш ордер
     if (order_type!=OrderType()) continue ;
    Result=OrderProfit()+OrderSwap()+OrderCommission();
     if (Result> 0.0 && (PrevProfit== 0.0 || Result>PrevProfit)) {
      PrevProfit=Result; MaxProfitTicket=OrderTicket();   // end of for
  } }
   if (MaxProfitTicket==- 1 ) return ( false ); // нет противоположной прибыльной позиции

  Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
   if (!Ans) { 
     Print ( "Ошибка при встречном закрытие!" ); return ( false ); 
  }
   return ( true ); 
}
//+----------------------------------------------------------------------------+
int NumberOfBuyPositions( string sy= "" , int op=- 1 , int mn=- 1 ) {
   int i, k= OrdersTotal (), kp= 0 ;
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (OrderType()==OP_BUY) {
         if (op< 0 || OrderType()==op) {
          kp++;
  } } } }
   return (kp);
}
//+----------------------------------------------------------------------------+
int NumberOfSellPositions( string sy= "" , int op=- 1 , int mn=- 1 ) {
   int i, k= OrdersTotal (), kp= 0 ;
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (OrderType()==OP_SELL) {
         if (op< 0 || OrderType()==op) {
          kp++;
  } } } }
   return (kp);
}
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double l= 0 ;
   int     i, k= OrdersTotal ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
         if (op< 0 || OrderType()==op) {
          l+=OrderLots();
  } } } }
   return (l);
}
//+----------------------------------------------------------------------------+
double GetMinProfit( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double p;
   int     i, k= OrdersTotal ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
         if (op< 0 || OrderType()==op) {
           if (p>OrderProfit()+OrderCommission()+OrderSwap())
          p=OrderProfit()+OrderCommission()+OrderSwap();
  } } } }
   return (p);
}
//+----------------------------------------------------------------------------+
double GetMaxProfit( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double p;
   int     i, k= OrdersTotal ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
         if (op< 0 || OrderType()==op) {
           if (p<OrderProfit()+OrderCommission()+OrderSwap())
          p=OrderProfit()+OrderCommission()+OrderSwap();
  } } } }
   return (p);
}
//+----------------------------------------------------------------------------+
 
borilunad :

Sergey, Dubakin , günaydın (benim için) ve iyi günler (sizin için)! Görsel bir kontrol yaptım ve bu fonksiyonun maksimumları seçtiğinden emin oldum, ki bu da ihtiyacım olan şeydi! Artık şüphem olmadığına sevindim ve senden özür dilerim! Ancak bizim işimizde "yedi kez ölçmek daha iyidir..." Test cihazınıza, daha net bir görsel kontrol için ek işlevler ve yorumlarla birlikte işlevi test etmesi için EA'yı gösteriyorum! Teşekkür ederim!

Aynen öyle... Igor Kim'e dayanarak bir şeyler yapılmış... İşlevlerinden sadece biri... Gerisi aynı...

 //+----------------------------------------------------------------------------+
int NumberOfBuyPositions( string sy= "" , int op=- 1 , int mn=- 1 ) { // для чего присвоены значения по-умолчанию, если они нигде не используются? Кроме op (и то неверно)
   int i, k= OrdersTotal (), kp= 0 ;
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (OrderType()==OP_BUY) {                               // тут жесткая проверка на тип Buy
         if (op< 0 || OrderType()==op) {                         // тут лишняя проверка на значение op, используемое по умолчанию и ещё одна лишняя проверка на ==op
          kp++;
  } } } }
   return (kp);
}
//+----------------------------------------------------------------------------+

bunun gibi bir şey, muhtemelen:

 //+----------------------------------------------------------------------------+
int NumberOfPositions( string sy, int op, int mn) {
   int i, k= OrdersTotal ()-1, kp= 0 ;
   for (i=k; i>=0; i--) {
   if ( OrderSelect (i,SELECT_BY_POS)) {           // если ордер выбран
       if (OrderMagicNumber()!=mn)   continue ;    // если не наш магик - смотрим следующий ордер
       if (OrderSymbol()!=sy)         continue ;    // если не наш символ - смотрим следующий ордер
       if (OrderType()!=op)           continue ;    // если не соответствует тип - смотрим следующий
      kp++;                                      // тут искомый ордер - увеличим счётчик
      }
   }
   return (kp);
}
//+----------------------------------------------------------------------------+

Ve biz onu diyoruz:

Geçerli sembol için Magic ile Satın Al ve Sayma Sayma için

 //+----------------------------------------------------------------------------+
   int BuyPos= NumberOfPositions( Symbol (), OP_BUY,  Magic);
   int SellPos=NumberOfPositions( Symbol (), OP_SELL, Magic);
//+----------------------------------------------------------------------------+
 
alsu :
paşa5282:
tüm açık işlemler arasında en küçük lotu nasıl seçeceğimi söyle?

int i, ot = OrdersTotal();
çift dakika=0;
int min_ticket=0;
for(i=0;i<ot;i++)
{
if(!OrderSelect(i,SELECT_BY_POS)) devam ediyor;
if(OrderType()!=OP_BUY && OrderType()!=OP_SEL) devam ediyor;
if(i==0||min>OrderLots()) {min = OrderLots(); min_ticket=OrderTicket();}
}


ipe baktım. Mantığınız garip. Son kod satırıyla ilgileniyorum:

 if (i== 0 ||min>OrderLots()) {min = OrderLots(); min_ticket=OrderTicket();
i değişkeni yalnızca döngünün başında 0 değerine sahiptir. Ardından, her yinelemede 1'lik bir değer ekleyecektir.

Daha sonra döngüye devam etmek için bir koşul vardır:

min>OrderLots()
AMA min sıfır olarak bildirilir ve kodun başka hiçbir yerinde değeri değişmez. Ve bu, bu değerin asla doğru olmayacağı anlamına gelir! mantık nerede?
 
hoz :


ipe baktım. Mantığınız garip. Son kod satırıyla ilgileniyorum:

i değişkeni sadece döngünün başında 0 değerine sahiptir. Ardından, her yinelemede 1'lik bir değer ekleyecektir.

Daha sonra döngüye devam etmek için bir koşul vardır:

AMA min sıfır olarak bildirilir ve kodun başka hiçbir yerinde değeri değişmez. Ve bu, bu değerin asla doğru olmayacağı anlamına gelir! mantık nerede?

 int i, ot = OrdersTotal ();
double min= 0.0 ;
int min_ticket= 0 ;
for (i= 0 ;i<ot;i++)
{
if (! OrderSelect (i,SELECT_BY_POS)) continue ;
if (OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue ;
if ( min== 0.0 ||min>OrderLots()) {min = OrderLots(); min_ticket=OrderTicket();}
}
Bunu yaparsanız, tüm tuhaflıklar ortadan kalkmalıdır.
 
hoz :


ipe baktım. Mantığınız garip. Son kod satırıyla ilgileniyorum:

i değişkeni yalnızca döngünün başında 0 değerine sahiptir. Ardından, her yinelemede 1'er bir değer ekleyecektir.

Daha sonra döngüye devam etmek için bir koşul vardır:

AMA min sıfır olarak bildirilir ve kodun başka hiçbir yerinde değeri değişmez. Ve bu, bu değerin asla doğru olmayacağı anlamına gelir! mantık nerede?

Not

 if (i== 0 ||min>OrderLots()) { min = OrderLots() ; min_ticket=OrderTicket();

  min>OrderLots() ise min = OrderLots();

 
r772ra :

Not

  min>OrderLots() ise min = OrderLots();

Min sıfır ise, asla OrderLots()'tan daha büyük olamaz.