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

 
Konstebl :

Lütfen bana danışmanın neden fırsatları açmadığını söyleyin HATA 130 yazıyor. Stoploss = 55 puan (4 tırnak karakteri)


Danışmanınızı biraz yükseltti. Yanlış açılış fiyatına karşı koruma eklendi.

 extern int PeriodLWMA= 14 ;
 extern int tp= 55 ;
 extern int sl= 55 ;
 extern double MaxRisk= 10 ;
 extern double Lot= 0.1 ;
 bool NewBar()
  {
       static datetime lastbar = 0 ;
       datetime curbar = iTime( Symbol (), 0 , 0 );
       if (lastbar!=curbar)
       {
             lastbar=curbar;
             return ( true );
       }
       return ( false );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
     int ticket;
     double price,takeprofit,stoploss,Lots;
//----
     double frUP = iFractals ( NULL , 0 ,MODE_UPPER, 3 );
     double frLOW = iFractals ( NULL , 0 ,MODE_LOWER, 3 );
     double lwma = iMA ( NULL , 0 ,PeriodLWMA, 0 , MODE_LWMA , PRICE_CLOSE , 0 );
    frUP = iFractals ( NULL , 0 ,MODE_UPPER, 3 );
    frLOW = iFractals ( NULL , 0 ,MODE_LOWER, 3 );
       double MaxLot = MarketInfo( Symbol (),MODE_MAXLOT);
       double MinLot = MarketInfo( Symbol (),MODE_MINLOT);
       Lots = NormalizeDouble (AccountFreeMargin()/ 10 *MaxRisk/ 1000 , 2 );
     if (Lots>MaxLot)
       Lots = MaxLot;
     else Lots=Lot;
     if (Lots<MinLot)
       Lots = Lot;
//----
     static bool flag = true ;
     if (NewBar())
      flag = true ;
       if (Ask>lwma && frUP>Ask && frUP != EMPTY_VALUE && flag)
         {
         price = NormalizeDouble (frUP+(Ask-Bid)+ 30 * Point , Digits );
         takeprofit = NormalizeDouble (price+tp* Point , Digits ); 
         stoploss = NormalizeDouble (price-sl* Point , Digits );
         ticket = OrderSend ( Symbol (),OP_BUYSTOP,Lots,price, 5 ,stoploss,takeprofit, "Fractal" , 123 , 0 ,Blue);
         if (ticket> 0 && GetLastError ()== 0 )
            flag = false ;
// Печатаем ошибку только в том случае, если она действительно случилась
         else Print ( "Ошибка № " , GetLastError (), " OP_BUYSTOP Ask=" ,DoubleToStr(Ask, 8 ), " Bid=" ,DoubleToStr(Bid, 8 ), " OpenPrice=" ,DoubleToStr(price, 8 ), " sl=" ,DoubleToStr(stoploss, 8 ), " tp=" ,DoubleToStr(takeprofit, 8 ));
             return (ticket);
         }
//-------------------------------------------------------------------
     if (NewBar())
      flag = true ;
       if (Bid<lwma && frLOW<Bid && frLOW> 0 && frLOW!= EMPTY_VALUE && flag)
         {
         price = NormalizeDouble (frLOW- 30 * Point , Digits );
         takeprofit = NormalizeDouble (price-tp* Point , Digits );
         stoploss = NormalizeDouble (price+sl* Point , Digits );
         ticket = OrderSend ( Symbol (),OP_SELLSTOP,Lots,price, 5 ,stoploss,takeprofit, "Fractal" , 123 , 0 ,Red);
         if (ticket> 0 && GetLastError ()== 0 )
            flag = false ;
// Печатаем ошибку только в том случае, если она действительно случилась
           else Print ( "Ошибка № " , GetLastError (), " OP_SELLSTOP Ask=" ,DoubleToStr(Ask, 8 ), " Bid=" ,DoubleToStr(Bid, 8 ), " OpenPrice=" ,DoubleToStr(price, 8 ), " sl=" ,DoubleToStr(stoploss, 8 ), " tp=" ,DoubleToStr(takeprofit, 8 ));
             return (ticket);
         }
  }
 
Vinin :

Ve bu seçenek uygun değil. en iyisi değil tabi


Posomtrel, ama ne yazık ki öyle değil. Mumu olduğu gibi boyamak istiyorum.
 
Sayesinde!
 
Vinin :

Çalışacak, ancak sonuç farklı olacak. beklediğin şey değil

Bana neyin yanlış olduğunu söyle? Ve bu programda bilmediğim işlevlerle gezinmek benim için hala zor.


Şimdiden teşekkürler!

 
arabon :

Bana neyin yanlış olduğunu söyle? Ve bu programda bilmediğim işlevlerle gezinmek benim için hala zor.


Şimdiden teşekkürler!


 double CalculateProfit_last() { //прибыль от последенй сделки
   double Profit = 0 ;
   int cnt;
   if ( OrdersTotal ()!= 0 )
   {
     cnt = OrdersTotal () - 1 ;
         OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == MagicNumber)
           if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit = OrderProfit();
   }
   Profit= 0.0 ;   // Зачем вести расчеты, если потом их обнулить
   Print (Profit);
   return (Profit);
}
Ve hangi sıralamadan bahsediyorsun? Son açık veya son kapalı hakkında. Eğer o tek ise, o zaman soru ortadan kalkar.
 
Vinin :

Ve hangi sıralamadan bahsediyorsun? Son açık veya son kapalı hakkında. Eğer o tek ise, o zaman soru ortadan kalkar.

Son kapatılan siparişten elde edilen karı hesaplamam gerekiyor, elbette tek o değil.


Not: Neden ağzımdan kaçırdığımı bile bilmiyorum =)

   }
   Profit= 0.0 ;   // Зачем вести расчеты, если потом их обнулить
   Print (Profit);
   return (Profit);
}
 


Merhaba. Bu kod testtir. İlk soru, satır numaralandırmasının nasıl görüneceğidir?

Ve konuyla ilgili daha fazlası: yukarıdaki kodda " ca[1]=Low[100]; Yeniden adlandırma   sadece bu seçenekte gerçekleşir" dizideki verilerin yeniden atanması yalnızca döngü içinde gerçekleşir. Belki dizi grafik verilerini görüntülemek için atanmışsa, o zaman ona yalnızca bir kez veri girebilirsiniz?  

int start(){
int i=0 ;int k=0 ;
 while(i<=5000) 
   { 
  k=0 ;
  ca[i]=0;
 volume[i]=0;
 while(k<=10)
 {ca[i]= ca[i]+Volume[i+k]*(High[i+k]+Low[i+k])/2;
  volume[i]=volume[i]+Volume[i+k];
   k=k+1; } ca[i]=ca[i]/volume[i];
    i=i+1;//ca[1]=Low[100]; Переобозначение происходит только в этом варианте  
  }
  ca[1]=Low[100];//Переобозначение не происходит программа не видит  
  int a1=1;
  while(a1==1)//Переобозначение не происходит программа не видит
  {ca[1]=Low[100];
  a1=a1+1;}
  return(0);
  }
 
İşte böyle çalışır. Görünüşe göre kendi soruma cevap verdim.
int start(){
int i=0 ;int k=0 ;
 while(i<=500) 
   { 
  k=0 ;
  ca1[i]=0;
 volume[i]=0;
 while(k<=10)
 {ca1[i]= ca1[i]+Volume[i+k]*(High[i+k]+Low[i+k])/2;
  volume[i]=volume[i]+Volume[i+k];
   k=k+1; } ca1[i]=ca1[i]/volume[i];
    i=i+1;
  }
 ca1[0]=Low[100];//Переобозначение  происходит программа  Видит
  //Цикл заполнения массива для отображения значений функции 
   i=0;
    while(i<=500)//Переобозначение происходит программа  Видит
     {ca[i]=ca1[i];
      i=i+1;}
  return(0);
  }
 
TG :
Equity (AccountEquity() ) ve Marjın (AccountMargin() ) Alış ve Satış pozisyonları için ayrı ayrı nasıl olduğunu söyleyin?

Bu tür işlevlerin I.Kim'in özel işlevlerinde bulunup bulunmadığına bakın: https://www.mql5.com/ru/forum/131859

İle

 
Ne yazık ki.
leonid553 :

Bu tür işlevlerin I.Kim'in özel işlevlerinde bulunup bulunmadığına bakın: https://www.mql5.com/ru/forum/131859

İle


maalesef bulunamadı