MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 865

 
Yan Barmin :
혼란스러운. 모든 커미션, 스왑 등을 고려하여 MT4의 미결 주문(지연 아님)에서 실제 이익(손실)을 얻는 방법 (즉 , 포지션을 청산 한 후 무엇을 얻을 수 있습니까?) OrderProfit() + OrderSwap() + OrderCommission() 또는 그냥 OrderProfit() 또는 다른 무엇입니까? 나는 주문이 끝난 후에 최소한 무언가를 벌고 싶습니다.
 OrderProfit() + OrderSwap() + OrderCommission()
 

지하실 창의 양초, 즉 아래에서 이러한 볼륨 수치를 배치하거나 지하실에서 작동하지 않는 경우 중앙에서 수평으로 동일한 선을 따라 모두 이동하도록 모든 숫자를 만드는 방법. 도움을 주시면 대단히 감사하겠습니다.

#속성 표시기_차트_창

#속성 표시기_너비1 2
#속성 표시기_너비2 2
#속성 표시기_너비3 2
#속성 표시기_너비4 4
#속성 표시기_너비5 4

#property indicator_color1 스카이블루
#property indicator_color2 적갈색
#property indicator_color3 노란색
#property indicator_color4 파란색
#property indicator_color5 딥핑크

외부 정수 BarsToCount = 990;

외부 문자열 pus1 = "";
extern string p_s = "포인트 설정";
extern 부울 use_points = true;
외부 int distance_point = 5;
외부 색상 color_point_u = 라임;
extern color color_point_d = 딥핑크;
외부 색상 color_point_s = 노란색;
외부 정수 size_point = 14;

외부 문자열 pus2 = "";
외부 문자열 s_w = "길";
extern 부울 use_show_same_way = true;
extern bool use_show_daily_way = true;

외부 문자열 pus3 = "";
extern string al = "경고";
extern 부울 use_alerts = 거짓;
외부 문자열 up_alert = "위로";
extern string down_alert = "아래로";


더블업[];
두 배로 늘리다[];
이중 중간[];
더블업2[];
더블 다운2[];
이중 없음[];

정적 정수 이전 시간 = 0;

//
정수 초기화()
{

IndicatorShortName("A");
리턴(0);
}

//
정수 초기화()
{
문자열 name_de;
for(int c=BarsToCount;c>=0;c--)
{
name_de="볼_"+DoubleToStr(c,0);
if(ObjectFind(name_de)!=-1) ObjectDelete(name_de);
}
리턴(0);
}
/////////////////////////////////////////////
정수 시작()
{
/////////////
위로[0]=EMPTY_VALUE;
down[0]=EMPTY_VALUE;
mid[0]=EMPTY_VALUE;
if(닫기[0]>열기[0]) up[0]=볼륨[0];
if(닫기[0]<열기[0]) down[0]=볼륨[0];
if(닫기[0]==열기[0]) mid[0]=볼륨[0];

/////////////////
if(use_points)
obcre(0);

if(!use_points)
옵델(0);
/////////////
if (시간[0] == 이전 시간) return(0);
이전 시간 = 시간[0];
/////////////////////////////
for(int c=BarsToCount;c>=1;c--)
{
/////////////
if(use_points)
obcre(c);

if(!use_points)
Ob_del(c);
/////////////
위로[c]=EMPTY_VALUE;
다운[c]=EMPTY_VALUE;
중간[c]=EMPTY_VALUE;
up2[c]=EMPTY_VALUE;
down2[c]=EMPTY_VALUE;

//////////////////
if(닫기[c]>열기[c]) up[c]=볼륨[c];
if(닫기[c]<열기[c]) 아래로[c]=볼륨[c];
if(닫기[c]==열기[c]) mid[c]=볼륨[c];
없음[c]=볼륨[c]+볼륨[c]/6;


///////////////
if(use_show_same_way)
{

if(닫기[c]>열기[c] && 닫기[c+1]>열기[c+1])
{
up2[c]=볼륨[c]; up2[c+1]=볼륨[c+1];
위로[c]=EMPTY_VALUE; 위로[c+1]=EMPTY_VALUE;
}

if(닫기[c]<열기[c] && 닫기[c+1]<열기[c+1])
{
down2[c]=볼륨[c]; down2[c+1]=볼륨[c+1];
다운[c]=EMPTY_VALUE; down[c+1]=EMPTY_VALUE;
}

}


if(use_alerts)
{
if(up2[1]!=EMPTY_VALUE && up2[4]==EMPTY_VALUE) 경고(up_alert);
if(down2[1]!=EMPTY_VALUE && down2[4]==EMPTY_VALUE) 경고(down_alert);
}
}
리턴(0);
}
//함수
//+----------------------------------------------- -------------------+//////////////////////////////// /
무효 Ob_cre(int num_of_bar)
{
문자열 이름 = "Vol_"+DoubleToStr(num_of_bar,0);

colorcol_po;
if(닫기[num_of_bar]>열기[num_of_bar]) col_po=color_point_u;
if(닫기[num_of_bar]<열기[num_of_bar]) col_po=color_point_d;
if(닫기[num_of_bar]==열기[num_of_bar]) col_po=color_point_s;

if(ObjectFind(이름)==-1)
{
ObjectCreate(이름, OBJ_TEXT ,0,0,0);
}
ObjectSet(이름,OBJPROP_TIME1,시간[num_of_bar]);
ObjectSet(이름,OBJPROP_PRICE1,높음[num_of_bar]+distance_point*Point);
ObjectSet(이름,OBJPROP_ANGLE,90);
ObjectSetText(이름,DoubleToStr(볼륨[num_of_bar],0),size_point,"Arrial",col_po);
ObjectSet(이름,OBJPROP_ANCHOR,ANCHOR_CENTER);
}

//
무효 Ob_del(int num_of_bar)
{
문자열 이름 = "Vol_"+DoubleToStr(num_of_bar,0);
}

파일:
 

EURUSD 를 기반으로 합성 기호를 생성합니다. 이름은 ZIGZAG 입니다(이름 충돌을 피하기 위해).

분 막대 가져오기, 모두 성공적으로 가져오지만 반복 요청 시 막대 수 는 0입니다. "history \ symbol" 폴더에는 폴더에 볼륨이 39mb 인 생성된 파일 "2019.hcc"가 있습니다. "똑딱" 모든 것이 비어 있습니다. 터미널(2019년 5월 30일 현재 버전)을 변경했는데 컴퓨터가 모든 곳에서 작동하지 않습니다.

무엇이 잘못되었을 수 있습니까?

파일:
simvol.zip  809 kb
 
SEM :

EURUSD 를 기반으로 합성 기호를 생성합니다. 이름은 ZIGZAG 입니다(이름 충돌을 피하기 위해).

분 막대 가져오기, 모두 성공적으로 가져오지만 반복 요청 시 막대 수 는 0입니다. "history \ symbol" 폴더에는 폴더에 볼륨이 39mb 인 생성된 파일 "2019.hcc"가 있습니다. "똑딱" 모든 것이 비어 있습니다. 터미널(2019년 5월 30일 현재 버전)을 변경했는데 컴퓨터가 모든 곳에서 작동하지 않습니다.

무엇이 잘못되었을 수 있습니까?

이름의 우연에
 
안녕 모두. 그러나 MT 4에서 데모 버전의 균형 기사로 마무리되고 변경할 수 있다는 사실은 어떻습니까? 귀하의 재량에 따라 데모 잔액을 변경할 수 있는 기회는 무엇입니까? 또는 보충하십시오. 또는 데모 자금을 인출하고 실제 거래에 최대한 가깝게 데모 거래를 가져오시겠습니까?
 
oleqas1 :
안녕 모두. 그러나 MT 4에서 데모 버전의 균형 기사로 마무리되고 변경할 수 있다는 사실은 어떻습니까? 귀하의 재량에 따라 데모 잔액을 변경할 수 있는 기회는 무엇입니까? 또는 보충하십시오. 또는 데모 자금을 인출하고 실제 거래에 최대한 가깝게 데모 거래를 가져오시겠습니까?

MetaTrader4는 더 이상 수정되지 않습니다. 이 플랫폼의 개발은 오랫동안 중단되었습니다. 최대 - 중요한 버그가 수정되었습니다.

MetaTrader5로 전환하고 TesterWithdrawal() 사용

Документация по MQL5: Общие функции / TesterWithdrawal
Документация по MQL5: Общие функции / TesterWithdrawal
  • www.mql5.com
Общие функции / TesterWithdrawal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
안녕하세요, 3일 동안 유럽 세션의 변동성을 계산하는 방법은 무엇입니까?
 

안녕하세요, 예를 들어 buystop 및 buylimit가 있는 경우.

바이스톱이 열리면 구매한도를 수정하고 새로운 바이스톱을 설정해야 합니다.

구매 제한이 열리면 구매 제한을 수정하고 새로운 구매 제한을 설정해야 합니다.

하려고 했더니 뜨는데 OrderModify 오류 1, OrderModify 오류 130과 함께 오류가 발생합니다. 해결 방법을 알 수 없습니다. 도와주세요.


 void OnTick ()
  {
      price_buystop = NormalizeDouble (Ask+StopLoss* Point , Digits );
      price_buyLimit = NormalizeDouble (price_buystop-StopLoss* 2 * Point , Digits );
      price_buy = PriceOpenLastPos();
      
       //для байстоп
         if (BuyStopCount()== 0 ) //если нет байстопа
       { 
       TP= NormalizeDouble (price_buystop + TakeProfit* Point , Digits );
       SL= NormalizeDouble (price_buystop - StopLoss* Point , Digits );  
       if (CountBuy()== 0 ) // и нет открытых бай 
       {    
       int ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP, "buystop" ,Magic, 0 ,Blue);       
       if (ticket < 0 ) Print ( "Не удалось открыть buystop " );
       }
         if (CountBuy()>= 1 ) // если нет байстоп но есть открытая
         {  
        price_buystop = NormalizeDouble (price_buy + StopLoss* Point , Digits );
         int ticket= OrderSend ( Symbol (),OP_BUYSTOP,Lots,price_buystop,Slippage,SL,TP, "buystop" ,Magic, 0 ,Blue);       
         if (ticket < 0 ) Print ( "Не удалось открыть buystop " );            
         } 
      } else {   //если есть байстоп модифицируем
       if (CountBuy()>= 1 ) //и есть открытые и байстоп
         {        
         price_buystop = NormalizeDouble (price_buy+StopLoss* Point , Digits );
         TP= NormalizeDouble (price_buystop + TakeProfit* Point , Digits );
         SL= NormalizeDouble (price_buystop - StopLoss* Point , Digits );        
         bool res = OrderModify(OrderTicket(),price_buystop,SL,TP, 0 ,Blue);     
         }   
      }
      
   //для байлимит
         if (BuyLimitCount()== 0 ) // если нет байлимит
       {   
       TP= NormalizeDouble (price_buyLimit + TakeProfit* Point , Digits );
       SL= NormalizeDouble (price_buyLimit - StopLoss* Point , Digits ); 
         if (CountBuy()== 0 ) // и нет открытых открываем
        {
         int ticket= OrderSend ( Symbol (),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP, "BuyLimit" ,Magic, 0 ,Blue);       
         if (ticket < 0 ) Print ( "Не удалось открыть BuyLimit " );   
        }
         if (CountBuy()>= 1 ) // если открытая есть
         {         
        price_buyLimit = NormalizeDouble (price_buy - StopLoss* Point , Digits );       
         int ticket= OrderSend ( Symbol (),OP_BUYLIMIT,Lots,price_buyLimit,Slippage,SL,TP, "BuyLimit" ,Magic, 0 ,Blue);         
         if (ticket < 0 ) Print ( "Не удалось открыть BuyLimit " );            
         }           
      }   else { // если есть байлимит и есть открытая
       if (CountBuy()>= 1 )
         {
         price_buyLimit = NormalizeDouble (price_buy-StopLoss* Point , Digits );         
         TP= NormalizeDouble (price_buyLimit + TakeProfit* Point , Digits );
         SL= NormalizeDouble (price_buyLimit - StopLoss* Point , Digits );        
         bool res = OrderModify(OrderTicket(),price_buyLimit,SL,TP, 0 ,Blue);    
         }   
      }
   
  }
//+------------------------------------------------------------------+
// проверяем есть ли байстоп ордера с конца
   int BuyStopCount()
  {
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES) == true && 
        OrderMagicNumber()== Magic && OrderType() == OP_BUYSTOP )                        
        {
        count ++;
        }
    }
     return (count); 
  }
  
   // проверяем есть ли ,байлимит ордера с конца
   int BuyLimitCount()
  {
   int count = 0 ;
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS,MODE_TRADES) == true && OrderMagicNumber()== Magic &&                        
        OrderType() == OP_BUYLIMIT )                       
        {
        count ++;
        }
    }
     return (count);      
  }
  
   //проверяем открытые ордера покупку
   int CountBuy()
  {
   int count = 0 ;
   for ( int trade = OrdersTotal ()- 1 ; trade>= 0 ; trade --)
  {
     if ( OrderSelect (trade, SELECT_BY_POS, MODE_TRADES) == true )
    {
       if (OrderSymbol()== Symbol () && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
        count++;
    }
   } return (count);
  }
  
  
   // возвращает цену открытия последней открытой позиции
  
   double PriceOpenLastPos()
{
int k= OrdersTotal ();
double r = 0 ;
int i;

for (i= 0 ; i<k; i++)
  {
   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )
   {
     if (OrderSymbol()== Symbol () && OrderMagicNumber()== Magic && OrderType()== OP_BUY)
     r=OrderOpenPrice();
   }
} return (r);
}


 

MT4의 Strategy Tester에서 Expert Advisor를 테스트할 때 이러한 오류가 발생하는 이유는 무엇입니까?


 
Alexandr Sokolov :

MT4의 Strategy Tester에서 Expert Advisor를 테스트할 때 이러한 오류가 발생하는 이유는 무엇입니까?


다운로드 기록. F2.