초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 271

 
soroko :
따라서 첫 번째 값만 인덱스 [0]으로 채워집니다.
 //+------------------------------------------------------------------+
//|                                                         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 :

감사합니다. 잠 못 이루는 주말에서 구했습니다.)

vicmos 감사합니다.
 
barabashkakvn :
vicmos 감사합니다.
ArrayFill(...)/ 함수와 같이 모든 것을 하나의 값으로 채웁니다.
 
soroko :
ArrayFill(...)/ 함수와 같이 모든 것을 하나의 값으로 채웁니다.
자리수가 적은 점 양해 부탁드립니다! 정말 감사합니다!
 

모두에게 좋은 하루! 그러한 문제 - 컴파일러가 경고를 발행합니다. 무시하고 싶지 않습니다. 탈출구를 찾도록 도와주시겠습니까?

   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 ));

특히 마지막 줄에서 "유형 변환으로 인한 데이터 손실 가능성 "이라고 맹세합니다. 이 경우 실제 유형을 올바르게 정규화하는 방법은 무엇입니까?

 
jommerbot :

모두에게 좋은 하루! 그러한 문제 - 컴파일러가 경고를 발행합니다. 무시하고 싶지 않습니다. 탈출구를 찾도록 도와주시겠습니까?

특히 마지막 줄에서 "유형 변환으로 인한 데이터 손실 가능성 "이라고 맹세합니다. 이 경우 실제 유형을 올바르게 정규화하는 방법은 무엇입니까?

   dVolatility = NormalizeDouble (dVolatility, ( int ) SymbolInfoInteger (sSymbol, SYMBOL_DIGITS ));
 
barabashkakvn :
감사해요
 
jommerbot :

모두에게 좋은 하루! 그러한 문제 - 컴파일러가 경고를 발행합니다. 무시하고 싶지 않습니다. 탈출구를 찾도록 도와주시겠습니까?

특히 마지막 줄에서 "유형 변환으로 인한 데이터 손실 가능성 "이라고 맹세합니다. 이 경우 실제 유형을 올바르게 정규화하는 방법은 무엇입니까?

그리고 한 가지 더: ArrayMaximum 및 ArrayMinimum 은 발견된 요소의 인덱스를 반환합니다. 따라서 이것은 정확합니다.

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

그리고 한 가지 더: ArrayMaximum 및 ArrayMinimum 은 발견된 요소의 인덱스를 반환합니다. 따라서 이것은 정확합니다.

매우 감사합니다. 코드를 디버깅할 때도 같은 것을 발견했습니다.
 

마감된 주문의 손실 금액을 기준으로 테이크 레벨을 잘못 계산합니다. 그것은 1 차 = 1로 밝혀졌습니다. 2차 = 2; 3차 = 3; 4차 주문 = 4., 5차 주문을 고정 수량으로 오픈할 예정입니다. 모든 이전 주문의 손실을 충당하고 총 손실의 10%에 해당하는 이익을 얻으려면 핍 수를 계산해야 합니다.

사실, 고문은 단순히 각 마감 주문의 양을 예상 보류 주문 과 동일하게 간주합니다. 즉, 계산에 따르면 보류 중인 5번째 주문이 5랏과 같으면 이전의 모든 주문이 수익성이 없는 주문은 5랏과 동일하며 여기에서 해당하는 잘못된 수준의 이익과 함께 손실을 고려합니다. 즉, 실제로 4개 주문의 총량 = 10랏이면 EA는 단순히 4개의 주문에 5번째 보류 주문의 볼륨을 곱하여 총 20개의 랏을 얻습니다. 수정해야 할 사항 코드에서?

// 마감된 거래의 손실 수준을 기반으로 테이크 수준을 계산하는 함수

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

이중 TakeProfitCalculate(이중 lot,int 유형)

{

인텐,나;

이중prf,ttp;


prf=-MathAbs(BuyLevel-SellLevel)/Point*LOT*MarketInfo(Symbol(),MODE_TICKVALUE);//

if(아니요!=0) for(i=OrdersHistoryTotal()-1;i>=0;i--)

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) 계속;

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

n=OrderMagicNumber()-MAGIC;

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

if(n==0) 중단;

}

prf=MathAbs(prf*(100+ProfitPercent)/100);

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

if(유형==OP_BUY) return(NRu(구매레벨+ttp)); 그렇지 않으면 return(NRd(SellLevel-ttp));

}

사유: