Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 271

 
soroko :
bu nedenle yalnızca ilk değer [0] dizini ile doldurulur.
 //+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link        "http://wmua.ru/slesar/"
#property version    "1.00"

double Pr[ 5 ];                 // обявление 5-мерного статического массива
double PriceOld;               // переменная для сравнения цены
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   double temp_prace= SymbolInfoDouble ( _Symbol , SYMBOL_BID );
   if ( NormalizeDouble (PriceOld-temp_prace, 5 )!= 0 )
     {
      Pr[ 4 ]=Pr[ 3 ];
      Pr[ 3 ]=Pr[ 2 ];
      Pr[ 2 ]=Pr[ 1 ];
      Pr[ 1 ]=Pr[ 0 ];
      Pr[ 0 ]=temp_prace;
      PriceOld=Pr[ 0 ];
     }
  }
//+------------------------------------------------------------------+
 
soroko :

teşekkür ederim. uykusuz hafta sonlarından kurtarıldı.)

teşekkürler vicmos .
 
barabashkakvn :
teşekkürler vicmos .
ArrayFill(...)/ işlevi gibi her şeyi tek bir değerle doldurur
 
soroko :
ArrayFill(...)/ işlevi gibi her şeyi tek bir değerle doldurur
Özür dilerim, sadece rakam sayısı daha az! Çok teşekkürler!
 

Hepinize iyi günler! Böyle bir sorun - derleyici bir uyarı verir. Bunu görmezden gelmek istemem, bir çıkış yolu bulmama yardım et?

   double aHigh[ 12 ], aLow[ 12 ];
   double dVolatility = 0.0 ;
   
   CopyHigh (sSymbol, PERIOD_MN1 , 0 , 12 , aHigh);
   CopyLow (sSymbol, PERIOD_MN1 , 0 , 12 , aLow);
   
   dVolatility = ArrayMaximum (aHigh) - ArrayMinimum (aLow);
   dVolatility = NormalizeDouble (dVolatility, SymbolInfoInteger (sSymbol, SYMBOL_DIGITS ));

Özellikle son satırda yemin ediyor: "Tür dönüştürme nedeniyle olası veri kaybı " diyor. Bu durumda gerçek tip nasıl düzgün bir şekilde normalleştirilir?

 
jommerbot :

Hepinize iyi günler! Böyle bir sorun - derleyici bir uyarı verir. Bunu görmezden gelmek istemem, bir çıkış yolu bulmama yardım et?

Özellikle son satırda yemin ediyor: "Tür dönüştürme nedeniyle olası veri kaybı " diyor. Bu durumda gerçek tip nasıl düzgün bir şekilde normalleştirilir?

   dVolatility = NormalizeDouble (dVolatility, ( int ) SymbolInfoInteger (sSymbol, SYMBOL_DIGITS ));
 
barabashkakvn :
teşekkürler
 
jommerbot :

Hepinize iyi günler! Böyle bir sorun - derleyici bir uyarı verir. Bunu görmezden gelmek istemem, bir çıkış yolu bulmama yardım et?

Özellikle son satırda yemin ediyor: "Tür dönüştürme nedeniyle olası veri kaybı " diyor. Bu durumda gerçek tip nasıl düzgün bir şekilde normalleştirilir?

Ve bir şey daha: ArrayMaximum ve ArrayMinimum , bulunan öğenin dizinini döndürür. Yani bu doğru:

   dVolatility = aHigh[ ArrayMaximum (aHigh)] - aLow[ ArrayMinimum (aLow)];
 
MigVRN :

Ve bir şey daha: ArrayMaximum ve ArrayMinimum , bulunan öğenin dizinini döndürür. Yani bu doğru:

Çok teşekkürler. Aynı şeyi kodda hata ayıklarken de keşfettim.
 

Kapanan siparişlerin kayıp miktarına göre alım seviyesini yanlış hesaplar. 1. sıra = 1 çıkıyor; 2. sıra = 2; 3. sıra = 3; 4. sıra = 4., 5. sıranın sabit bir hacimle açılması planlanmaktadır. Önceki tüm siparişlerdeki zararı kapatmak için pip sayısını hesaplamanız ve toplam zararın %10'u kadar kar elde etmeniz gerekir.

Aslında, danışmanın her kapalı siparişin hacmini beklenen bekleyen siparişe eşit olarak kabul ettiği ortaya çıktı , yani, hesaplamalarına göre, bekleyen 5. siparişin 5 lota eşit olması durumunda, önceki tüm kârsız siparişler 5 lota eşittir ve buradan, karşılık gelen doğru olmayan kâr düzeyi ile zararı dikkate alır. Yani, aslında 4 siparişin toplam hacmi = 10 lot ise, EA 4 siparişi bekleyen 5. siparişin hacmiyle çarpar ve toplam hacim 20 lot alır...... Düzeltilmesi gerekenler kodda?

// Kapanan işlemlerin kayıp seviyesine göre alım seviyesini hesaplama işlevi

//============================================== ==============================================

double TakeProfitCalculate(çift lot,int tipi)

{

intn,i;

çift prf,ttp;


prf=-MathAbs(Satın AlmaSeviyesi-SatışSeviyesi)/Puan*LOT*MarketInfo(Symbol(),MODE_TICKVALUE);//

if(No!=0) for(i=OrdersHistoryTotal()-1;i>=0;i--)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) devam et;

if(OrderSymbol()!=Symbol() || OrderMagicNumber()<MAGIC || OrderMagicNumber()>MAGIC+200 || OrderType()>OP_SELL) devam ediyor;

n=OrderMagicNumber()-MAGIC;

prf+=(OrderProfit()+OrderSwap()+OrderCommission());

if(n==0) ara;

}

prf=MathAbs(prf*(100+KarYüzdesi)/100);

ttp=prf*Nokta/(LOT*MarketInfo(Symbol(),MODE_TICKVALUE));

if(type==OP_BUY) return(NRu(BuyLevel+ttp)); başka dönüş(NRd(SellLevel-ttp));

}