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

 
polsvv , 이를 위해 마법이 사용됩니다. 각 고문은 자신의 마법을 가지고 있습니다
 
vnn :

여러분, 안녕하세요...

MetaTrader 4 히스토리 파일의 경로를 수집하는 방법을 알려주십시오. 예: "c:\program files\metatrader 4\history\alpari-classic\"

https://docs.mql4.com/ru/files/FileOpenHistory
 

고마워요, sergeev , 제가 이해한 것 같아요 ...

Print("Terminal path: ", TerminalPath() + "\\history\\" + AccountServer() + "\\");

이 줄은 편집기의 색상이 잘못되었음에도 불구하고 올바른 경로를 표시합니다. 메모장에 코드를 작성해야 합니다. 농담.

 

모두 좋은 저녁!

Sergey Kovalev의 교과서에서 나는 전문가를 찾았습니다. 메타에디터에 복사해서 컴파일했는데 프로그램이 안되네요. 이유가 무엇인지 알려주세요. 내가 뭔가 잘못하고 있는 것 같다.

 

mql로 작성되었나요?

코드를 게시

 
얘들아, 바보들에게 iCustom 사용법을 설명해줘
나는 쓴다
이중 BBUP =iCustom(NULL, 0, "밴드","밴드 주기","밴드 이동","밴드 편차",1,0);
이중 BBDW =iCustom(NULL, 0, "밴드","밴드 주기","밴드 이동","밴드 편차",2,0);
그리고 여전히 작동하지 않습니다 ...
내 임무는 상단 및 하단 라인 의 밴드 표시기에서 신호를 수신하는 것입니다. 즉, 밴드 .....
 
//------------------------------------------------ --------------------
// 수정 stoploss.mq4
// MQL4 튜토리얼에서 예제로 사용하도록 설계되었습니다.
//------------------------------------------------ --------------------
extern int Traal_Stop=10; // 거리 박해
//------------------------------------------------ --------------- 하나 --
int start() // 사양. 시작 기능
  {
   문자열 Symb=Symbol(); // 금융. 도구
//------------------------------------------------ --------------- 2 --
   for(int i=1; i<=OrdersTotal(); i++) // 순서를 통해 루프
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // 다음이 있는 경우
        { // 주문 분석:
         int Tip=주문 유형(); // 주문 유형
         if(OrderSymbol()!=Symb||Tip>1)continue;// 주문이 아님
         이중 SL=OrderStopLoss(); // 선택한 주문의 SL.
         //------------------------------------------------ ------ 삼 --
         while(true) // 루프 수정
           {
            이중 TS=Tral_Stop; // 초기 값
            int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//최소. 거리
            if (TS<Min_Dist) // 허용보다 작으면
               TS=최소 거리; // 새로운 TS 값
            //------------------------------------------------ --- 4 --
            bool 수정=거짓; // 수정에 할당되지 않음
            switch(Tip) // 주문 유형별
              {
               case 0 : // 주문 구매
                  if (NormalizeDouble(SL,Digits)< // 더 낮은 값을 원하는 경우.
                     NormalizeDouble(Bid-TS*Point,Digits))
                    {
                     SL=입찰가-TS*포인트; // 그런 다음 수정
                     문자열 텍스트 = "구매"; // 구매를 위한 텍스트 
                     수정=참; // 수정에 할당됩니다.
                    }
                  부서지다; // 종료 스위치
               case 1 : // 매도 주문
                  if (NormalizeDouble(SL,Digits)> // 더 높은 값을 원하는 경우.
                     NormalizeDouble(Ask+TS*Point,Digits)
                     || NormalizeDouble(SL,Digits)==0)//또는 0
                    {
                     SL=질문+TS*포인트; // 그런 다음 수정
                     Text="판매"; // 판매용 텍스트 
                     수정=참; // 수정에 할당됩니다.
                    }
              } // 종료 스위치
            if (Modify==false) // 수정하지 않은 경우
               부서지다; // 종료하는 동안
            //------------------------------------------------ --- 5 --
            이중 TP =OrderTakeProfit(); // 선택된 주문의 TP.
            doublePrice=OrderOpenPrice(); // 가격이 선택되었습니다. 주문.
            int 티켓=OrderTicket(); // 선택된 번호. 주문.

            경고("수정",텍스트,티켓,". 답변을 기다리는 중..");
            bool Ans=OrderModify(Ticket,Price,SL,TP,0);//수정합니다!
            //------------------------------------------------ --- 6 --
            if (Ans==true) // 알았습니다 :)
              {
               Alert("주문",텍스트,티켓,"수정됨:)");
               부서지다; // 수정 루프에서.
              }
            //------------------------------------------------ --- 7 --
            정수 오류 = GetLastError(); // 작동하지 않았습니다 :(
            switch(Error) // 피할 수 있는 오류
              {
               case 130:Alert("정지가 잘못되었습니다. 다시 시도하세요.");
                  새로 고침(); // 데이터 업데이트
                  계속하다; // 트레일에서. 반복
               case 136:Alert("가격이 없습니다. 새 틱을 기다리는 중입니다..");
                  while(RefreshRates()==false) // 다음 틱까지
                     수면(1); // 루프에서 지연
                  계속하다; // 트레일에서. 반복
               case 146:Alert("거래 하위 시스템이 사용 중입니다. 다시 시도합시다.");
                  수면(500); // 간단한 솔루션
                  새로 고침(); // 데이터 업데이트
                  계속하다; // 트레일에서. 반복
                  // 치명적인 오류
               case 2 : Alert("일반 오류입니다.");
                  부서지다; // 종료 스위치
               case 5 : Alert("클라이언트 단말기의 이전 버전입니다.");
                  부서지다; // 종료 스위치
               case 64: Alert("계정이 차단되었습니다.");
                  부서지다; // 종료 스위치
               case 133:Alert("거래 금지");
                  부서지다; // 종료 스위치
               기본값: Alert("오류가 발생했습니다. ",오류);//기타. 실수
              }
            부서지다; // 수정 루프에서.
           } // 수정 루프의 끝.
         //------------------------------------------------ ------ 여덟 --
        } // 주문 분석 종료.
     } // 주문 열거 끝.
//------------------------------------------------ --------------- 아홉 --
   반품; // start()에서 종료
  }
//------------------------------------------------ -------------- 십 --
 
VOLDEMAR :
얘들아, 바보들에게 iCustom 사용법을 설명해줘
나는 쓴다
이중 BBUP =iCustom(NULL, 0, "밴드","밴드 주기","밴드 이동","밴드 편차",1,0);
이중 BBDW =iCustom(NULL, 0, "밴드","밴드 주기","밴드 이동","밴드 편차",2,0);
그리고 여전히 작동하지 않습니다 ...
내 작업은 위쪽 및 아래쪽 라인의 밴드 표시기에서 신호를 수신하는 것입니다. 즉 밴드.....
https://docs.mql4.com/en/indicators/iBands
 
FelixFX :

모두 좋은 저녁!

Sergey Kovalev의 교과서에서 나는 전문가를 찾았습니다. 메타에디터에 복사해서 컴파일했는데 프로그램이 안되네요. 이유가 무엇인지 알려주세요. 내가 뭔가 잘못하고 있는 것 같다.


이것을 사용하십시오:

사용자 변수에 다음을 씁니다.

 extern string    с 9 = "------ Трейлингстоп ------" ;
extern int       TrailingStop= 20 ; //Трейлинг-Стоп рыночного ордера. Если = 0 или то тарла нет
extern int       TrailingStep= 5 ; //Шаг трала рыночного ордера
extern bool      WaitProfit = true ; // Если true, то ждать профит = значению TrailingStop и только потом начинать тралить
                                     //Иначе, трейлинговать не дожидаясь положительного профита

extern string   с10=" -------- Прочие параметры -------------";
extern int      MAGIC=123456;//У ордеров открытых вручную MAGIC=0
extern int      Proskalz=10;//Проскальзывание

고문의 시작 부분에서 우리는 다음과 같이 씁니다.

 // ----------------------------- Тралим ордера ------------------------------------
TrailingRyn_b(TrailingStop,TrailingStep,Proskalz,MAGIC,WaitProfit,false);

시작한 후 사용자 루틴에서 다음을 작성합니다.

 // =================================================================================================
// ************************* Трейлинг рыночных ордеров *********************************************
// =================================================================================================


// =================  TrailingRyn() =============================================================
// функция осуществляет трейлинг рыночных ордеров 
// ----------------------------------------------
void TrailingRyn_b( int ryn_TrStop, int ryn_TrStep, int Proskalz, int MAGIC, bool WaitProfit,   bool UseTrailingSound) {
   string SMB= Symbol (); 
   int i;
   int MinLevel=MarketInfo(SMB,MODE_STOPLEVEL); //Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах   
   int SchBuy=SchBuy(MAGIC);
   int SchSell=SchSell(MAGIC);
   if (ryn_TrStop>=MinLevel && ryn_TrStep> 0 && (SchBuy> 0 || SchSell> 0 )){    
     for (i= OrdersTotal ()- 1 ;i>= 0 ;i--){
       if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {WriteError(i);}
       else {
         if (OrderSymbol()==SMB && OrderMagicNumber()==MAGIC){
          TrailingPositions_b(ryn_TrStop,ryn_TrStep,Proskalz,WaitProfit,UseTrailingSound);
        }
      }
    }
  }
 if (ryn_TrStop>=MinLevel && ryn_TrStep== 0 )
 Alert ( "Трейлинг невозможен - ryn_TrStep==0" );
} 
// =================================================================================================

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions_b( int ryn_TrStop, int ryn_TrStep, int Proskalz, bool WaitProfit, bool UseTrailingSound){
   if (OrderType()==OP_BUY){
     if (!WaitProfit || (Bid-OrderOpenPrice())>ryn_TrStop* Point ){
       if (OrderStopLoss()<Bid-(ryn_TrStop+ryn_TrStep- 1 )* Point ){
        ModifyStopLoss_b(Bid-ryn_TrStop* Point ,UseTrailingSound);
      }
    }
  }
   if (OrderType()==OP_SELL){
     if (!WaitProfit || OrderOpenPrice()-Ask>ryn_TrStop* Point ) {
       if (OrderStopLoss()>Ask+(ryn_TrStop+ryn_TrStep- 1 )* Point || OrderStopLoss()== 0 ){
        ModifyStopLoss_b(Ask+ryn_TrStop* Point ,UseTrailingSound);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss_b( double ldStopLoss, bool UseTrailingSound){
   bool fm=false;
   string NameTrallingSound  = "ok.wav" ; // Наименование звукового файла для трейлинга
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(), 0 , CLR_NONE );
   if (fm!= 0 && fm!=- 1 ){
     if (UseTrailingSound) { PlaySound (NameTrallingSound);}
  }   
   if (fm== 0 || fm==- 1 ) { ModifError();}
}
//+------------------------------------------------------------------+

ModifError()와 같은 함수는 내 사용자 정의 함수입니다. 단지 오류 메시지 를 출력합니다. 대신 메시지를 작성하십시오.

 
감사합니다 .... 도움이 되었다면 여기에 질문하지 않겠습니다 ..............
사유: