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

 

뭐가 문제 야?

템플릿 클래스가 있습니다.

 template < typename T>
class MyList{
 private :
    T *array[];
     int _size;
public :
    WavesList(){
        _size = 0 ;
    }
     void add(T &obj){
        _size++;
         ArrayResize (array, _size, 0 );
        array[_size- 1 ] = obj;
    }
     void cut(){
         delete array[_size- 1 ];
        _size--;
         ArrayResize (array, _size, 0 );
    }
     int size(){
         return _size;
    }
    T lastWave(){
         return array[size- 1 ];
    }
};

그런 다음 코드에서 다음을 시도합니다.

MyList myList<OtherClass>();

맹세해!

 
Roman Sharanov :

그런 다음 코드에서 다음을 시도합니다.

맹세해!

다음과 같이 필요합니다.

MyList<OtherClass> myList;

다음은 https://www.mql5.com/ru/forum/221917/page25#comment_11205772 에 게시된 템플릿으로 작업하는 예입니다.

봐, 내 코드와 유추하여 당신의 코드를 작성할 수 있습니다.

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2019.04.03
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 
Igor Makanu :

다음과 같이 필요합니다.

다음은 https://www.mql5.com/ru/forum/221917/page25#comment_11205772 에 게시된 템플릿으로 작업하는 예입니다.

봐, 내 코드와 유추하여 당신의 코드를 작성할 수 있습니다.

감사합니다

 

라인을 기준으로 텍스트의 위치를 설정할 수 있습니까?

선은 프로그래밍 방식으로 생성되고 텍스트는 선 위에 그려지지만 어떤 경우에는 텍스트가 아래에 있어야 합니다...


그것을 구현하는 방법?


 void paintShLine( datetime sdata, datetime edata, double bev, string nm, string txt, color cl)
   {
       ObjectCreate ( 0 , nm, OBJ_TREND , 0 , sdata, bev, edata, bev);
       
       //--- установим цвет линии
       ObjectSetInteger ( 0 ,nm, OBJPROP_COLOR ,cl);
       //--- установим стиль отображения линии
       ObjectSetInteger ( 0 ,nm, OBJPROP_STYLE , STYLE_DASH );
       //--- установим толщину линии
       ObjectSetInteger ( 0 ,nm, OBJPROP_WIDTH , 1 );
       //--- включим (true) или отключим (false) режим продолжения отображения линии вправо
       ObjectSetInteger ( 0 ,nm, OBJPROP_RAY_RIGHT , true );
       ObjectSetInteger ( 0 ,nm, OBJPROP_RAY , true );    
       //--- отобразим на переднем (false) или заднем (true) плане
       ObjectSetInteger ( 0 ,nm, OBJPROP_BACK , true );
       //--- включим (true) или отключим (false) режим перемещения линии мышью
       ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTABLE , false );
       ObjectSetInteger ( 0 ,nm, OBJPROP_SELECTED , false );
       //--- установим текст
       if (showShadowText) ObjectSetString ( 0 ,nm, OBJPROP_TEXT , "  " +txt);
       //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
       ObjectSetInteger ( 0 ,nm, OBJPROP_HIDDEN , true );
 }
 
안녕하세요,
바이 딜을 열 때 어드바이저가 열린 딜의 매매 로트와 최대 매매 로트를 비교하고, 로트가 일정 값 이상이면 어드바이저가 자동으로 마지막 딜을 닫도록 하고 싶습니다.

아래 예에서 그는 어드바이저가 거래 로트가 2보다 높으면 거래를 마감한다고 밝혔습니다. 이 조건이 효과가 있다고 생각하십니까?

if ((typeLastOrder==OP_BUY && orderlots()>2 || typeLastOrder==OP_BUYSTOP && orderlots()>2 || typeLastOrder==OP_BUYLIMIT && orderlots()>2)){
경고 ("2보다 훨씬 높은 값을 사용하는 것은 금지되어 있습니다");
CloseDelete(마지막 티켓);
반품;
}
 
Konstantins Korolkovs :
안녕하세요,
바이 딜을 열 때 어드바이저가 열린 딜의 매매 로트와 최대 매매 로트를 비교하고, 로트가 일정 값 이상이면 어드바이저가 자동으로 마지막 딜을 닫도록 하고 싶습니다.

아래 예에서 그는 어드바이저가 거래 로트가 2보다 높으면 거래를 마감한다고 밝혔습니다. 이 조건이 효과가 있다고 생각하십니까?

if ((typeLastOrder==OP_BUY && orderlots()>2 || typeLastOrder==OP_BUYSTOP && orderlots()>2 || typeLastOrder==OP_BUYLIMIT && orderlots()>2)){
Alert("2보다 큰 값을 사용하는 것은 금지되어 있습니다.");
CloseDelete(마지막 티켓);
반품;
}

먼저 열고 닫는 이유는 무엇입니까? 아예 열지 않는 것이 나을까요?

 
Alexey Viktorov :

먼저 열고 닫는 이유는 무엇입니까? 아예 열지 않는 것이 나을까요?

당신의 탐욕을 통제하기 위해

 

빨간색, 녹색, 노란색의 형태로 촛불 위에 틱의 수를 왼쪽, 오른쪽 또는 수평으로 이동하는 데 도움이 드뭅니다. 이 숫자는 세로로 이동하지만 가로로 할 수 없습니다. 그것은 매우 필요하고 측면에서 아름답게 보이지 않지만 그것이 참조하는 촛불의 반대편에 있기를 바랍니다. 표시기 코드:


//+----------------------------------------------- --------------------+

//| 파인 volume.mq4 |
//| 이브빌 |
//| itallillusion@gmail.com |
//+----------------------------------------------- --------------------+
#재산권 "Aliev"
#속성 링크 "businessystems.com"

#속성 표시기_분리_창
#속성 표시기_최소 0
#속성 표시기_버퍼 6

#속성 표시기_너비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 = 400;

외부 문자열 pus1 = "";
extern string p_s = "포인트 설정";
extern 부울 use_points = true;
외부 int distance_point = 80;
외부 색상 color_point_u = 라임;
외부 색상 color_point_d = 빨간색;
외부 색상 color_point_s = 노란색;
외부 정수 size_point = 6;

외부 문자열 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;

//////////////////////////////////////////
정수 초기화()
{
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,up);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1, 아래로);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexBuffer(2, 중간);
SetIndexStyle(3,DRAW_HISTOGRAM);
SetIndexBuffer(3,up2);
SetIndexStyle(4,DRAW_HISTOGRAM);
SetIndexBuffer(4, down2);
SetIndexStyle(5,DRAW_NONE);
SetIndexBuffer(5, 없음);


IndicatorShortName("Aliev FX 볼륨");


리턴(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(use_show_daily_way)
Ob_cre2();
if(!use_show_daily_way)
Ob_del2();

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


}

////////////////////////////////////////////
무효 Ob_cre2()
{
int Num_of_win = WindowFind("Aliev FX 볼륨");

if(ObjectFind("D_w")==-1)
{
ObjectCreate("D_w",OBJ_LABEL,Num_of_win,0,0);
ObjectSet("D_w",OBJPROP_CORNER,1);
ObjectSet("D_w",OBJPROP_XDISTANCE,20);
ObjectSet("D_w",OBJPROP_YDISTANCE,20);
ObjectSetText("D_w","일일 볼륨",10,"Arrial",흰색);
}


if(ObjectFind("D_w_v")==-1)
{
ObjectCreate("D_w_v",OBJ_LABEL,Num_of_win,0,0);
ObjectSet("D_w_v",OBJPROP_CORNER,1);
ObjectSet("D_w_v",OBJPROP_XDISTANCE,20);
ObjectSet("D_w_v",OBJPROP_YDISTANCE,45);
}
색상 vol_col;
if(iClose(Symbol(), PERIOD_D1,0 )>iOpen(Symbol(),PERIOD_D1,0)) vol_col=라임;
if(iClose(Symbol(),PERIOD_D1,0)<iOpen(Symbol(),PERIOD_D1,0)) vol_col=주황색;

ObjectSetText("D_w_v",DoubleToStr(iVolume(Symbol(),PERIOD_D1,0),0),12,"Arrial",vol_col);


}

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

if(ObjectFind(이름)!=-1)
{
개체삭제(이름);
}


}

////////////////////////////////////////////
무효 Ob_del2()
{
if(ObjectFind("D_w")!=-1)
ObjectDelete("D_w");


if(ObjectFind("D_w_v")!=-1)
ObjectDelete("D_w_v");



}
 
koctja :

빨간색, 녹색, 노란색의 형태로 촛불 위에 틱의 수를 왼쪽, 오른쪽 또는 수평으로 이동하는 데 도움이 드뭅니다. 이 숫자는 세로로 이동하지만 가로로 할 수 없습니다. 그것은 매우 필요하고 측면에서 아름답게 보이지 않지만 그것이 참조하는 촛불의 반대편에 있기를 바랍니다. 표시기 코드:


그런 경우에는 숫자 앞에 공백을 표시하기만 하면 됩니다(인쇄물이 가로인 경우)...
 
koctja :

빨간색, 녹색, 노란색의 형태로 촛불 위에 틱의 수를 왼쪽, 오른쪽 또는 수평으로 이동하는 데 도움이 드뭅니다. 이 숫자는 세로로 이동하지만 가로로 할 수 없습니다. 그것은 매우 필요하고 측면에서 아름답게 보이지 않지만 그것이 참조하는 촛불의 반대편에 있기를 바랍니다. 표시기 코드:

OBJ_TEXT 개체를 시도하고 속성에서 앵커 포인트를 설정 하십시오.


ANCHOR_CENTER

대상 의 중심에 있는 기준점


 ObjectSetInteger ( 0 ,name, OBJPROP_ANCHOR , ANCHOR_CENTER );