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

 
xant :

리고니치

당신은 일종의 농담입니까 아니면 무엇입니까? 어디서 웃을까?

타라스비

당신은 할 수 없습니다? 글쎄, 그들은 그것을 받아들이지 않을 것입니다.

나는 러시아어로 편지를 썼습니다. 교과서에는 전역 변수 선언에 대한 내용이 거의 없습니다. 예를 들어, 나는 fGet_MineGV();

기능인가요? 그렇다면 그녀는 무엇을합니까? 자습서에서 fGet 검색은 null 결과를 반환합니다.

int init() 에서 무엇을 선언해야 합니까? 당신은 썼다:

{
fGet_MineGV();
}


내 Expert Advisor에서 Init 초기화는 다음과 같습니다.

정수 초기화()
{
배열초기화(buf3,0);
배열 초기화(b1,0);
배열 초기화(b2,0);
배열 초기화(b3,0);
배열 초기화(b4,0);


Comment("평균값 계산 "+ind);
m1=NormalizeDouble(iCustom(NULL,tf,ind+"_a",0,0),2);
string d="평균 "+ind+" "+DoubleToStr(m1,2);
tm=TimeCurrent();
정수 q=0, 티켓=-1;
이중 opr=0, lot1=0;
for(q=0;q<주문 총계();q++)
{

등등, 100줄 더. 어디에, 구체적으로 어떤 장소에, 가장 중요한 것은 정확히 무엇을 여기에서 발표해야 합니까? 러시아어로 쓰기가 정말 어렵습니까? 손가락을 구부리자, 그래.

기능인가요? 그렇다면 그녀는 무엇을합니까? 자습서에서 fGet 검색은 null 결과를 반환합니다.

네, 기능입니다. 교과서에 그런 내용이 있을 수 없고, 교과서가 쓰여질 당시에는 아예 존재하지도 않았습니다. 이것은 특별히 당신을 위해 작성된 사용자 정의 기능입니다.

       void  fGet_MineGV ( string  fs_PrefName =  ""  // префикс имени переменной
       { 
         string ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_1" );
         if ( GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_2" );
         if ( GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_3" );
         if ( GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_4" );
         if ( GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
         //----
    }
 
좋은 저녁이에요! 후행 정지 는 주문 을 하는 즉시 즉시 작동합니다. 그리고 그것은 티켓 티켓이 있는 주문이 기록에 남을 때만 작동해야 하며 엄격하게 이익을 취하는 방식으로 진행되어야 합니다.


//***************************************   
 
  nahodka= false ;
 
 
 if ( OrderSelect (tocket, SELECT_BY_TICKET , MODE_HISTORY))  
 if (OrderTakeProfit( )- 3 * Point <profitsell&&OrderTakeProfit( )+ 3 * Point >profitsell) nahodka= true ;
     // Находим ордер, сработавший именно по тейкпрофиту 
 
 
  
 if (nahodka){ if ( OrderSelect (tecket,SELECT_BY_TICKET)){
 if (OrderStopLoss( )>Bid+treylingstop* Point ){ Print ( "четвёртаямодифи    " );
 OrderModify(  tecket, OrderOpenPrice(), Bid+treylingstop* Point , OrderTakeProfit(), 0 , CLR_NONE );}}}
   // Модифицируем оставшийся ордер
 for ( i = OrdersTotal () - 1 ; i >= 0 ; i--)
 

리고니치

나는 맨 처음에 그렇게 했다. init 함수 안에 이 코드를 삽입하고 컴파일한 후 다음과 같은 설명을 얻었습니다.

"fGet_MineGV" 기능 은 참조되지 않으며 exp 파일에서 제거됩니다.

이 말은 이해가 되는데, 아직 기록이 없어서 아무것도 셀 수 없잖아요?

그런 다음 이미 시작 함수 안에 코드의 두 번째 부분을 작성합니다. 이 조각은 다음과 같습니다.

void fSave_MineGV(문자열 fs_PrefName = "") // 변수 이름 접두사
{
정적 날짜 시간 ldt_NewBar;
날짜 시간 ldaTBeginBar = iTime(Symbol(), 1, 0)
//---- 매분 시작에 저장
if (ldt_NewBar == ldaTBeginBar) 반환;
ldt_NewBar = ldaTBeginBar;
//---- 각 변수의 값을 차례로 저장
문자열 ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_1");
GlobalVariableSet(ls_Name, SUA);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet(ls_Name, SUA1);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_3");
GlobalVariableSet(ls_Name, BUA);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet(ls_Name, BUA1);
}

모든 것이 여기에 있습니까?

SUA, SUA1, BUA, BUA1 계산 직후에 이 부분을 삽입합니다.

그러나 컴파일될 때 고문은 다음과 같이 문제를 제기합니다.

오류 27개, 경고 64개

 

크산트 :

리고니치

나는 맨 처음에 그렇게 했다. init 함수 안에 이 코드를 삽입하고 컴파일한 후 다음과 같은 설명을 얻었습니다.

"fGet_MineGV" 기능은 참조되지 않으며 exp 파일에서 제거됩니다.

이 말은 이해가 되는데, 아직 기록이 없어서 아무것도 셀 수 없잖아요?

그런 다음 이미 시작 함수 안에 코드의 두 번째 부분을 작성합니다. 이 조각은 다음과 같습니다.

void fSave_MineGV(문자열 fs_PrefName = "") // 변수 이름 접두사
{
정적 날짜 시간 ldt_NewBar;
날짜 시간 ldaTBeginBar = iTime(Symbol(), 1, 0)
//---- 매분 시작에 저장
if (ldt_NewBar == ldaTBeginBar) 반환;
ldt_NewBar = ldaTBeginBar;
//---- 각 변수의 값을 차례로 저장
문자열 ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_1");
GlobalVariableSet(ls_Name, SUA);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet(ls_Name, SUA1);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_3");
GlobalVariableSet(ls_Name, BUA);
ls_Name = StringConcatenate(fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet(ls_Name, BUA1);
}

모든 것이 여기에 있습니까?


함수 설명은 시작, 초기화 또는 기타 함수에 삽입되지 않습니다. 별도로 위치해야 합니다. 최소한 Expert Advisor의 시작 부분, 끝 부분, 중간 부분에 배치할 수 있지만 다른 기능 내부에는 배치할 수 없습니다. init에서는 함수 호출 만 삽입하면 되며 맨 처음에 삽입할 수 있습니다.

이 말은 이해가 되는데, 아직 기록이 없어서 아무것도 셀 수 없잖아요? 맞습니다. 컴파일러가 다른 함수 외부에 있어야 하는 위치에서 찾는 함수 선언이 없습니다.

{

fGet_MineGV();
}

두 번째 기능에도 동일하게 적용됩니다. 이것은 입문서이며 프로그래밍을 하는 사람은 누구나, 심지어 초보자라도 이것을 모를 것이라고 상상하기 어렵습니다.

 
Dimka-novitsek :
좋은 저녁이에요! 후행 정지는 주문을 하는 즉시 작동합니다. 그리고 그것은 티켓 티켓이 있는 주문이 기록에 남을 때만 작동해야 하며 엄격하게 이익을 취하는 방식으로 진행되어야 합니다.

그러나 결국 당신의 기록이 비어 있지 않다면 당신은 거의 확실히 이익을 내기 위해 정확히 작동하는 주문을 찾을 것입니다. 분명히, 당신은 tp에 의해 마감된 주문에 대한 내역을 조회하지 않지만 필요한 주문이 어떻게 마감되었는지, 그리고 그것이 전혀 마감되었는지 여부를 확인하기 위해 내역을 확인합니다. 그래서 이것을 확인하십시오. 주문의 종가가 정확히 얼마인지 확인하는 이유는 무엇입니까? 세 가지 옵션 -- 1. 종가==0 -- 시장이 있는 경우 주문이 기록에 없습니다(OrderSelect()는 false를 반환함). 2. 종가는 다음과 같습니다.
오더테이크프로핏 ( )
-- 주문이 tp에 의해 마감되었습니다. 3. 마감 가격이 다음과 같지 않습니다.
오더테이크프로핏 ()
-- tp 에 따라 주문이 마감되지 않았습니다.
 

리고니치

다시 스물 다섯. 나는 매우 구체적으로 물었습니다. 첫 번째 단계를 올바르게 밟았습니까? 당신은 직접적인 질문에 대답하지 않았고, 요점에 대해 한마디도 하지 않았습니다.

네, 물론 교과서는 읽었지만 제 직업은 프로그래밍과 아무 관련이 없기 때문에 명확하고 단순하며 구체적인 알고리즘을 요구하는 것이 분명합니다. 글쎄, 이해하기 어렵습니까? 장점에 대답하기 어렵다면 왜 귀찮게합니까? 그냥 지나가세요.

그리고 코멘트로서 - 당신은 내가 얼마나 많은 사람들을 만나는지 모릅니다. 나는 일반 개업의가 바보라고 부를 수 있습니다. 성인이 자신의 건강과 관련된 기본적인 문제를 이해하지 못한다는 것은 상상하기 어렵습니다. 내가 모든 사람에게 당신이 반응하는 방식으로 반응한다면 나는 전문가로서 무가치해질 것입니다. 잘 자다.

_______________

제발 - 누군가 나에게 비누 neroy(dog)mail.ru에 편지를 써주세요. 그는 바보같이 조언자의 코드를 받아 올바른 위치에 필요한 것을 삽입할 수 있습니다.

 
xant :

리고니치

다시 스물 다섯. 나는 매우 구체적으로 물었습니다. 첫 번째 단계를 올바르게 밟았습니까? 당신은 직접적인 질문에 대답하지 않았고, 요점에 대해 한마디도 하지 않았습니다.

네, 물론 교과서는 읽었지만 제 직업은 프로그래밍과 아무 관련이 없기 때문에 명확하고 단순하며 구체적인 알고리즘을 요구하는 것이 분명합니다. 글쎄, 이해하기 어렵습니까? 장점에 대답하기 어렵다면 왜 귀찮게합니까? 그냥 지나가세요.

그리고 코멘트로서 - 당신은 내가 얼마나 많은 사람들을 만나는지 모릅니다. 나는 일반 개업의가 바보라고 부를 수 있습니다. 성인이 자신의 건강과 관련된 기본적인 문제를 이해하지 못한다는 것은 상상하기 어렵습니다. 내가 모든 사람에게 당신이 반응하는 방식으로 반응한다면 나는 전문가로서 무가치해질 것입니다. 잘 자다.

_______________

제발 - 누군가 나에게 비누 neroy(dog)mail.ru에 편지를 써주세요. 그는 바보같이 조언자의 코드를 받아 올바른 위치에 필요한 것을 삽입할 수 있습니다.


어드바이저를 데려가서 필요한 코드를 삽입해달라고 요청하지 않았고, 어드바이저의 코드를 게시하지 않았습니다. 처음에는 어드바이저를 끌 때 데이터 손실 문제를 해결하기 위해 도움을 요청했습니다. 도와준 사람을 모욕하고 나서 맞냐고 물으면서 "첫걸음"을 떼고, 뭐가 잘못됐는지 구체적으로 지적하면 도와주는 사람을 또 모욕하니까 그럴 가능성은 거의 없다고 본다. 다른 사람이 이것을 하고 싶어한다는 것입니다.

추신 그리고 알고리즘은 두 개의 기성 기능을 취하는 것보다 더 간단하고 명확합니다. 그것들을 당신의 조언자에게 복사하고 init의 시작 부분에서 하나를 호출하고 시작의 끝에서 다른 하나를 호출하는 것조차 생각하기 어렵습니다. 의.

 
rigonich :

일반적으로 이것은 다른 사람이 부분적으로 수정한 귀하의 코드입니다.


코드는 오류를 제공하지 않았습니다 . 하지만 역시 결과는 나오지 않았다.

그리고 그의 코드는 24개의 오류 때문에 작동하지도 않았습니다.

하지만 아이디어를 얻었습니다. 이제 모든 것이 작동합니다.

 

컴파일러는 확실히 비인간적입니다. 이제 내 뇌는 거의 고장났어 왜 오류가 표시되는지

'(' - 예기치 않은 함수 정의 G:\Program_Files_2\MT4-demo\experts\3.mq4 (139, 14)

이 Expert Advisor가 어제 쾅하고 작업하고 오늘은 긴 IF를 몇 개의 짧은 IF로 열었습니다....

컴파일러가 오류를 표시한 곳에서 KILOMETER에 대한 따옴표를 놓친 것이 밝혀졌습니다! 또한 그는 따옴표에 대해 침묵했습니다. 알다시피, FUNCTION이 그에게 적합하지 않습니다 ....:((( ((((((

 

리고니치

나는 당신의 모든 말에 요점별로 대답 할 수 있지만 더 이상 요점을 볼 수 없습니다. 누군가가 쉬면 그에게 아무 것도 설명 할 수 없습니다. 첫 번째 질문은 구성 방법이었습니다. 그런 다음 전역 변수 가 파일에 쓰는 것보다 낫다는 힌트를 주었을 때 올바르게 수행하는 방법에 대한 질문이 생겼습니다. 그런 다음 긴장한 룸메이트가 비꼬는 기회를 놓치지 않고 코드를 제공했습니다. 간단합니다. 코드의 일부는 초기화 블록으로 이동하고 블록의 일부는 EA의 메인 블록으로 이동합니다.

초기화 블록에 들어가는 내용은 다음과 같습니다.

 void fGet_MineGV ( string fs_PrefName = "" ) // префикс имени переменной
     {
         string ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_1" );
         if ( GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_2" );
         if ( GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_3" );
         if ( GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_4" );
         if ( GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
     }

다음은 메인 블록에 들어가는 것입니다.

 void fSave_MineGV ( string fs_PrefName = "" ) // префикс имени переменной
{
 static datetime ldt_NewBar;
 datetime ldaTBeginBar = iTime ( Symbol (), 1 , 0 )
 //---- Сохраняемся в начале каждой минуты
 if (ldt_NewBar == ldaTBeginBar) return ;
 ldt_NewBar = ldaTBeginBar;
 //---- Сохраняем поочереди значения каждой переменной
 string ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_1" );
 GlobalVariableSet (ls_Name, SUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_2" );
 GlobalVariableSet (ls_Name, SUA1);
 ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_3" );
 GlobalVariableSet (ls_Name, BUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol (), "_N_4" );
   GlobalVariableSet (ls_Name, BUA1);
}

보시다시피 변수 이름을 변경했습니다.

그래서 변수 계산 직후 시작하여 시작 블록의 끝으로 이동하여 마지막 중괄호 앞에 삽입하려는 시도로 끝나는 코드의 두 번째 부분을 순차적으로 삽입했습니다.

당신의 고도로 전문적인 설명에 따르면 이것이 내가 해야 할 일입니다. 왜냐하면 이것은 모든 초보자에게 분명하기 때문입니다. 당신의 의견으로는 모든 것이 작동해야합니다. 하지만 작동하지 않습니다. 내가 달성할 수 있었던 최고는 다음과 같습니다.

 8 error(s), 0 warning(s)