[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 134

 
Roll :

큰 감사합니다!

귀하의 버전에서 표시기가 작동합니다!

그와 동시에 세 가지 작은 문제가 나타나서 MQL4 교재로 풀고 지표 예제를 복습해 보았지만 아무 소용이 없었다.

욕구, 시간, 기분이 있다면 이유를 알아내도록 도와주세요.

1. 표시기를 설정할 때 라인은 값 0(영)을 얻고 첫 번째 틱이 도착한 경우에만 최상위 변수의 값을 취하거나 표시기 매개변수 창을 열고 즉시 닫아야 합니다.

2. top 매개변수는 init()에 줄이 있지만 4번째 문자까지 계산됩니다.

IndicatorDigits(숫자+1);

그리고 라인

top=WindowPriceMax(win_idx);

나는 그것을 대체했다

top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);

도움이되지 않습니다! 그리고 인디케이터 창의 스케일 수치는 5자리입니다.

3. 지표가 제거되어도 차트에서 주석 이 제거되지 않습니다.



코드

--------

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],
ExtMapBuffer2[];
//--------------------------------
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min_v2");

IndicatorDigits(Digits+1);

return(0);
}
//--------------------------------
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),limit,win_idx;
double top;

if(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;
win_idx=WindowFind("MACD_max-min_v2");

for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
}

// top=WindowPriceMax(win_idx);
top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);
Comment( "\n"," top = ",top);
ObjectDelete("max");

if(ObjectFind("max")!=win_idx)
{
ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
}

return(0);
}
//+------------------------------------------------------------------+


파일:
 
MK07 :

기술 편집 - 고문이 하는 것처럼 상단 표시줄에 있는 SRC 버튼을 사용 하여 코드를 붙여넣습니다 . 훨씬 더 읽기 쉬울 것입니다.

추신
주석 문자열을 지우려면 Comment("");를 deinit()에 삽입하십시오.
 
granit77 :
기술 편집 - 고문처럼 상단 표시줄에 있는 SRC 버튼을 사용하여 코드를 붙여넣습니다. 훨씬 더 읽기 쉬울 것입니다.

추신
주석 문자열을 지우려면 Comment("");를 deinit()에 삽입하십시오.
정보 감사합니다. 포럼에 처음 가보는 것입니다. 코드 스니펫에 대해 특별한 감사를 드립니다.
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){Comment("");return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
for(int i=0;i<limit;i++){ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
  ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}
  Comment( "\n"," top = ",DoubleToStr(top,5));return(0);}
//+------------------------------------------------------------------+
 
https://docs.mql4.com/ru/common/Comment
무효 주석 ( ...)
이 함수는 차트의 왼쪽 상단 모서리에 사용자 정의 설명을 표시합니다. 매개변수는 모든 유형이 될 수 있습니다. 매개변수의 수는 64개를 초과할 수 없습니다.
배열은 Comment() 함수에 전달할 수 없습니다. 배열은 요소별로 인쇄되어야 합니다.
더블 데이터는 도트 뒤에 4자리의 10진수로 출력됩니다 . 숫자를 더 정확하게 표시하려면 DoubleToStr() 함수를 사용해야 합니다.
bool, datetime 및 색상 유형은 숫자로 인쇄됩니다.
날짜/시간 데이터를 문자열로 출력하려면 TimeToStr() 함수를 사용하십시오.

줄 바꿈 문자 "\n" 또는 "\r\n"을 사용하여 출력 정보를 여러 줄로 구분할 수 있습니다.
Alert()Print() 함수 도 참조하십시오 .
 
수식을 작성하는 방법을 알려주십시오.
가격 이 수평선 을 넘었다....
그리고 이 라인은 어떻게 설명해야 할까요?
 
Roll :
과학에 감사드립니다.
 

여보세요,

여기 문제가 있습니다.

PERIOD_H1에서 작업합니다.

시간이 끝날 때 닫으려면 다음을 수행합니다.

   for (j = OrdersTotal ()- 1 ; j >= 0 ; j--){ 
       if ( OrderSelect (j, SELECT_BY_POS, MODE_TRADES))
           if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber){
            OpenTime= OrderOpenTime ();          
           if ( OrderType () == OP_BUY){
             if ( TimeCurrent ()>Time[ 0 ]+ 3580 ){ 
             OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble (Bid, Digits ), 0 , Red );}
             }
           else 
           if ( OrderType () == OP_SELL){
             if ( TimeCurrent ()>Time[ 0 ]+ 3580 ){
             OrderClose ( OrderTicket (), OrderLots (), NormalizeDouble (Ask, Digits ), 0 , Blue );}
             }
           }
         }
시초에 위치를 열려면 다음을 수행합니다.
   if ( TimeCurrent ()<Time[ 0 ]+ 3500 && HaveBuy==false && HaveSell==false)
     if (Ask <= EnBuy && IsFreeLevel==true){
          ticket = OrderSend ( Symbol (),OP_BUY,Lot, NormalizeDouble (Ask, Digits ), 0 , 0 ,forecast- 5 *MyPoint, "" ,MagicNumber, 0 , Blue );
         }
     if (Bid >= EnSel && IsFreeLevel==true){
          ticket = OrderSend ( Symbol (),OP_SELL,Lot, NormalizeDouble (Bid, Digits ), 0 , 0 ,forecast+ 5 *MyPoint, "" ,MagicNumber, 0 , Red );
         }

그러나 테스트에서 다음과 같이 나타납니다.

나는 그것을 이해할 수 없다, 내가 어디에서 잘못되고 있는가?

항상 그런 식으로 작동하지는 않지만 발생합니다.

답변해 주신 분들 감사합니다 :)

 
alsu :
이 얘기를 하는 게 아니라 전문가가 매달린 곳에 뭐가 다른 걸까? 올바르게 쓰여졌다면 어디에 매달렸는지는 중요하지 않습니다. 적어도 몽골 증권 거래소 차트에 걸어두십시오. 그러나 내부에서 1분 동안 유로달러로 작동하도록 설정되어 있으면 그렇게 할 것입니다. 프로그래밍하는 것은 전혀 어렵지 않습니다. 원칙적으로 몇 줄만 변경하면 됩니다.

많은 설명 감사합니다!

내 유일한 관심사는 각 분 막대가 열릴 때 테스터에서 1분 수정이 시뮬레이션된다는 것입니다.

Open[0]을 iOpen (NULL,1,0)으로 변경하고 1분 막대의 여는 것을 확인하는 함수를 추가하려고 합니다.

몇 분이 지나고 코드를 수정하고 M5의 테스터에서 테스트했으며 이 경우 테스터가 등록되었지만 1분 막대가 열리지 않는지 확인하고 5분마다 수정합니다. 무서워하는. 모든 진드기의 모드에서 더 자주 수정했기 때문에 조금 더 좋습니다. 그러나 M1에서는 바 오프닝에서만 Open[0]과 iOpen(NULL,1,0)에서 동일한 방식으로 작동합니다. 어쨌든 감사합니다!

이제 저는 항상 녹색 iOpen을 사용할 것입니다. 나는 당신이 레드 오픈 없이 할 수 있음을 참조하십시오. 이익의 녹색은 빨간색 손실보다 더 즐겁습니다. (:))

 
mario065 :

여보세요,

여기 문제가 있습니다.

PERIOD_H1에서 작업합니다.

시간이 끝날 때 닫으려면 다음을 수행합니다.

시초에 위치를 열려면 다음을 수행합니다.
그러나 테스트에서 다음과 같이 나타납니다.

나는 그것을 이해할 수 없다, 내가 어디에서 잘못되고 있는가?

항상 그런 식으로 작동하지는 않지만 발생합니다.

답변해 주신 분들 감사합니다 :)


친구가 다음과 같이 제안했습니다.
TimeCurrent() 대신

TimeSeconds(TimeCurrent())

그리고 효과가 있었습니다.