[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 59

 
xrust писал(а) >>
세부 보고서의 이름을 일반 보고서로 변경할 수 있습니다. 그러면 만족할 것입니다.

어렵지 않다면 이 이름을 정확히 어디에 대체할 수 있는지 알려주세요. 사용 설명서에는 이에 대해 전혀 언급되어 있지 않습니다.

 
어 .. 당신이 날 혼란스럽게 .... 파일 이름을 바꾼 적이 있습니까 ???
 
친애하는 전문가 여러분, 제 질문을 무시하지 마십시오.

매일과 같이 변동성을 계산하는 지표가 있습니까? 그러나 무한한 숫자가 0.34처럼 나오는 것은 아닙니다. 그리고 그는 하루에 촛불 틱 수를 세고 예를 들어 주어진 기간(일수)으로 나누어 평균 값을 알 수 있도록 합니다. 예: 100개시, 200개종가; 둘째 날 - 시가 200, 종가 250. 이 2일의 평균 변동성 = ((200-100)+(250-200))/2일=(100+50)/2=75
가능한 경우 다운로드할 수 있는 위치입니다.
 
xrust писал(а) >>
Uh .. 당신은 나를 혼란스럽게합니다 .... 파일 이름을 바꾼 적이 있습니까 ???

터미널은 지정된 시간 간격(예: 매 20분) 후에 자동으로 보고서를 생성하여 FTP 서버에 업로드한다고 가정합니다. 사이트에 보고서를 추가로 표시하기 위한 FTP 서버 호스트. 이 기본 터미널 기능은 일반 보고서를 저장하지만 추가 정보 및 그래프와 함께 상세한 보고서가 바람직합니다. 수동으로 상세내역을 문제 없이 저장하고 필요한 이력 기간을 선택할 수 있습니다.

그리고 처음에는 나를 어리둥절하게했습니다. 자동 기능의 작업을 구성하기 위해 수동으로 무엇을, 어디에 이름을 바꿔야합니까? 전혀 명확하지 않습니다.

 

https://forum.mql4.com/en/10422의 게시물을 반복하여 여기에 질문하는 것이 더 적절할 것입니다.


다음은 example.ini 에서 가져온 코드의 일부입니다.

[common]
numCross=3

[cross1]
name=EURUSD

[cross2]
name=GBPUSD

[cross3]
name=USDJPY


쌍의 수를 읽은 다음 하나씩 문자열 배열에 쌍의 이름을 저장합니다.

#include <IniFiles.mqh>

extern string config_path = "C:\Program Files\MetaTrader - MetaQuotes\experts\example.ini";

string CrossName[];
int numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
string sectionName = "common";

numCross = ReadIniInteger(config_path, sectionName, "numCross", 0);
ArrayResize(CrossName, numCross);

for (int i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = ReadIniString(config_path, sectionName, "name", "-");
Print("init.1: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.1: read complete");

for (i=0; i<numCross; i++)
{
Print("init.2: CrossName[", (i+1), "]=", CrossName[i]);
}


Print("-------------------------------");
for (i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = StringSubstr(ReadIniString(config_path, sectionName, "name", "-"), 0, 0);
Print("init.3: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.3: read complete");

for (i=0; i<numCross; i++)
{
Print("init.4: CrossName[", (i+1), "]=", CrossName[i]);
}

return(0);
}


모든 것이 간단해 보이며 ini를 읽은 후에는 쌍 이름의 배열을 얻어야 합니다.

그러나 결과적으로 ini에서 매개변수를 다음에 읽고 배열의 다음 요소에 값을 할당한 후 ,

이전에 할당된 다른 모든 요소는 동일한 값을 얻습니다.

2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: -------------------------------
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[2]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[1]=USDJPY

2009.04.09 02:17:06 example GBPUSD,H4: init.1: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[1]=EURUSD

문자열 배열을 변수에 할당할 때 실제로 할당이 발생한다는 것이 밝혀졌습니다.

값이 아니라 참조입니다. 사용 가능한 모든 문서와 포럼을 살펴보았지만 이것이 왜 그런 것인지 답을 찾지 못했습니다.

StringSubstr 을 사용하여 탈출구를 찾았지만 이것이 옳지 않다고 말하는 것이 있습니다.


아는 사람들을 위한 질문: 다른 변수의 값을 문자열 배열의 요소에 올바르게 할당하는 방법은 무엇입니까?

 
Yug >> :

https://forum.mql4.com/en/10422의 게시물을 반복하면 여기에 질문하는 것이 더 적절할 것입니다.


기억! 문자열 구현의 기능. 배열의 크기를 조정한 후에는 배열을 살펴보고 0으로 재설정해야 합니다.

 ArrayResize ( CrossName , numCross ) ;

for ( int i = 0 ; i < numCross ; i + + )
{
   CrossName [ i ] = "" ;
}
내가 틀릴 수 있지만 도움이 될 것입니다.
 
XinoXano писал(а) >>

터미널은 지정된 시간 간격(예: 매 20분) 후에 자동으로 보고서를 생성하여 FTP 서버에 업로드한다고 가정합니다. 사이트에 보고서를 추가로 표시하기 위한 FTP 서버 호스트. 이 기본 터미널 기능은 일반 보고서를 저장하지만 추가 정보 및 그래프와 함께 상세한 보고서가 바람직합니다. 수동으로 상세내역을 문제 없이 저장하고 필요한 이력 기간을 선택할 수 있습니다.

그리고 처음에는 나를 어리둥절하게했습니다. 자동 기능의 작업을 구성하기 위해 수동으로 무엇을, 어디에 이름을 바꿔야합니까? 전혀 명확하지 않습니다.

보고서 템플릿 statement.htm 및 세부 보고서 StatementDetailed.htmterminal\templates\ 폴더에 있습니다. 기본적으로 터미널은 일반적인 보고서 statement.htm 을 보내지만 자세한 StatementDetailed.htm 이 필요합니다. Windows 환경에서 StatementDetailed.htm 파일의 이름을 statement.htm 으로 바꾸도록 러시아어로 제안했습니다. 또는 이름 바꾸기에 대한 지침도 작성하시겠습니까?

 

친애하는 전문가 여러분,

거래 잠금 처리를 도와주세요

세부 정보 및 코드: '위치 잠금 처리를 도와주세요'

항상 존경심을 가지고

 
xrust писал(а) >>

보고서 템플릿 statement.htm 및 세부 보고서 StatementDetailed.htmterminal\templates\ 폴더에 있습니다. 기본적으로 터미널은 일반적인 보고서 statement.htm 을 보내지만 자세한 StatementDetailed.htm 이 필요합니다. Windows 환경에서 StatementDetailed.htm 파일의 이름을 statement.htm 으로 바꾸도록 러시아어로 제안했습니다. 또는 이름 바꾸기에 대한 지침도 작성하시겠습니까?

아니요, 이름을 직접 바꿀 수 있지만 한 템플릿을 다른 템플릿으로 교체하는 데에는 전혀 문제가 되지 않았습니다...

정말 감사합니다! 이제 모든 것이 명확하고 모든 것이 작동합니다!!!

 
Everlost >> :

매우 간단합니다. Cls_S 또는 Cls_B 신호가 도착하면 마지막으로 열린 위치를 잊어버립니다(Last_Position 변수의 값을 다시 -1로 재설정).

if ((Cls_S==true || Cls_B==true) && Last_Position>=0) Last_Position=-1;

이론적으로 이해할 수 있습니다. 어떤 이유로 만 이제 전문가는 거래를 완전히 중단했습니다 ((

나는 지금 이것을 가지고있다 :

 //Учет ордеров истории
int ORDtime = 0 ;
double ORDprofit = 0.01 ;
int ORDtype = - 1 ;
for ( int j = OrdersHistoryTotal ( ) - 1 ; j > = 0 ; j - - ) 
{
   if ( OrderSelect ( j , SELECT_BY_POS , MODE_HISTORY ) ) 
   {
     if ( OrderSymbol ( ) = = Symbol ( ) ) 
     {
       if ( OrderCloseTime ( ) ! = 0 & & OrderCloseTime ( ) > ORDtime ) 
       {
        ORDtime = OrderCloseTime ( ) ;
        ORDtype = OrderType ( ) ;
        ORDprofit = OrderProfit ( ) ;
       }
     }
   }
}
. . .
//Торговые критерии на открытие и экстренное закрытие ордеров
if ( ( ORDtype = = - 1 ) & & ( . . . ) )
   {
    Opn_B = true ;
   }
if ( ( ORDtype = = - 1 ) & & ( . . . ) )     
   {
    Cls_B = true ;
   }
if ( . . . )
   {
    Opn_S = true ;
   }
if ( . . . )     
   {
   Cls_S = true ;
   }
// Дополнительные условия к открытию
if ( ( Cls_B = = true | | Cls_S = = true ) & & ( ORDtype > = 0 ) ) ORDtype = - 1 ;        //ДОПИСАТЬ УСЛОВИЕ ИСТОРИЧЕСКИХ ОРДЕРОВ


오류가 있습니까?