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

 
Roger :
파일을 한 줄씩 읽고 매번 변수에 값을 할당합니다. 파일이 끝나면 변수는 마지막 값을 갖습니다.

그것을 구현하는 방법?

무엇을 사용할지 알 수 없음

 
zheleznii :

그것을 구현하는 방법?

무엇을 사용할지 알 수 없음


    이것에 대해 이미 많이 작성되고 다시 작성되었습니다. https://www.mql5.com/ru/forum/118349 를 시도하십시오.
     

    그리고 다시 굿나잇! 얼마 전 저는 다중 통화 고문을 작성하기 시작했습니다. 하나의 통화에 있고 다른 통화에 대한 주문을 열고 후행 구현에서 문제가 발생했습니다.

    나는 전문가에게서 가장 가까운 트롤을 꺼내 똑똑해지기 시작했지만 아무 일도 일어나지 않았습니다. 코드는 다음과 같습니다.

     // ну так сообственно вызываю функцию - TrailingStop();
    //вот что в функции
     void TrailingStop()
    { 
       if (TrailingStop<MinStop) return ; 
       int ask, bid, open, stop, level; 
       for ( int i= 0 ; i< OrdersTotal (); i++) 
          { 
          if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) break ; 
          if (OrderSymbol()!= Symbol ()) continue ; 
          if (OrderType()==OP_BUY) 
             { 
             bid= MathRound (Bid/ Point ); 
             open= MathRound (OrderOpenPrice()/ Point ); 
             stop= MathRound (OrderStopLoss()/ Point ); 
             level=bid-TrailingStop; 
             if (level<open || level>bid-MinStop) continue ; 
             if (stop> 0 && stop>=level) continue ; 
             OrderModify(OrderTicket(),OrderOpenPrice(),level* Point ,OrderTakeProfit(), 0 , White ); 
             Print ( "трал сдвинут" );
             //ShowError(); 
             } 
          if (OrderType()==OP_SELL) 
             { 
             ask= MathRound (Ask/ Point ); 
             open= MathRound (OrderOpenPrice()/ Point ); 
             stop= MathRound (OrderStopLoss()/ Point ); 
             level=ask+TrailingStop; 
             if (level>open || level<ask+MinStop) continue ; 
             if (stop> 0 && stop<=level) continue ; 
             OrderModify(OrderTicket(),OrderOpenPrice(),level* Point ,OrderTakeProfit(), 0 , White ); 
             //ShowError(); 
             Print ( "трал сдвинут" );
             } 
          } 
    }

    그리고 여기 내가 알아낼 수없는 것이 있습니다. 고문은 만화이기 때문에 예측할 수 없는 통화에 대한 주문을 열며 동시에 여러 통화에서 발생합니다.

    후행 코드에서 미결 주문 ( int i= 0 ; i< OrdersTotal (); i++)에 대해 계산된 다음 OrderSelect 주문 이 선택됩니다. 특정 쌍에 대한 각 미결 주문에 대해 변경 사항을 수신해야 한다는 것을 이해합니다. 입찰, 데이터 잘 묻기 등 이것이 걸림돌이 있는 곳이지만 함수가 다운로드할 통화에서 어떤 데이터를 찾고 변경 순서를 선택하는 방법을 어떻게 알 수 있습니까? 내 머리에는 단 하나의 옵션만 있습니다. 최악의 경우 각 통화에 대해 후행을 작성하는 것입니다.) . 무엇을 할 수 있는지 말해 주세요. 내가 알기로는 이것은 후행에만 적용되는 것이 아니라 주문을 마감하는 기능과도 동일합니다.

     
    Infinity :

    그리고 다시 굿나잇! 얼마 전 저는 다중 통화 전문가 고문을 작성하기 시작했습니다. 이 전문가 고문은 한 통화에 있고 다른 통화에 대해 주문을 개시하고 후행 구현에서 문제에 부딪쳤습니다.

    나는 전문가에게서 가장 가까운 트롤을 꺼내 똑똑해지기 시작했지만 아무 일도 일어나지 않았습니다. 코드는 다음과 같습니다.

    그리고 여기 내가 알아낼 수없는 것이 있습니다. 고문은 만화이기 때문에 예측할 수 없는 통화에 대한 주문을 열며 동시에 여러 통화에서 발생합니다.

    후행 코드에서 미결 주문 ( int i= 0 ; i< OrdersTotal (); i++)에 대해 계산된 다음 OrderSelect 주문이 선택됩니다. 특정 쌍에 대한 각 미결 주문에 대해 변경 사항을 수신해야 한다는 것을 이해합니다. 입찰, 데이터 잘 묻기 등 이것이 걸림돌이 있는 곳이지만 함수가 다운로드할 통화에서 어떤 데이터를 찾고 변경 순서를 선택하는 방법을 어떻게 알 수 있습니까? 내 머리에는 단 하나의 옵션만 있습니다. 최악의 경우 각 통화에 대해 후행을 작성하는 것입니다.) . 무엇을 할 수 있는지 말해 주세요. 내가 알기로는 이것은 후행에만 적용되는 것이 아니라 주문을 마감하는 기능과도 동일합니다.

    트롤 코드에 악기 기호를 전달해 보십시오. 그런 다음 각 쌍에 대해 트롤을 부를 것입니다.
     void TrailingStop( string sy)
    
    if (sy == "" || sy == "0" ) sy = Symbol();
    
    글쎄, sy의 값을 기반으로 특정 기호의 데이터를 다른 값에 할당합니다 ... 예를 들어 동일한 Ask with Bid ...
     

    Infinity :

    기술이 어떻게 작동하는지 잘 이해하지 못했습니다.


     
    Roger :

    이것에 대해 이미 많이 작성되고 다시 작성되었습니다. https://www.mql5.com/ru/forum/118349 를 시도하십시오.

    정수 a1;

    int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');
    FileWrite(핸들, a1);

    파일 닫기(핸들);

    파일에서 a1=5;

    기본에 대한 오해가 있어 설명해주세요 - 제안사항 추가

    int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');
    여기서 a1에는 값 5가 할당됩니다.

    파일 닫기(핸들);

    정말 필요한

     
    Infinity :
    함수에 전달된 쌍의 데이터를 기반으로 후행 코드의 변수에 값을 할당합니다. 후행 코드를 완료해야 합니다... 예를 들어, Bid 변수는 선언만 해서는 안 됩니다.

    할당된 값으로 선언됩니다.

     int ask = MarketInfo(sy, MODE_ASK), bid=MarketInfo(sy, MODE_BID), open, stop, level;

    각기

    bid= MathRound (Bid/ Point );

    예를 들어 다음과 같이 다르게 작성해야 합니다.

    bid= MathRound (MarketInfo(sy, MODE_BID)/ Point );

    또는 PriceBid와 같은 다른 변수를 만들고 작성하십시오.

    PriceBid= MathRound (Bid/ Point );

    그리고 나중에 코드에서 Bid 대신 PriceBid를 사용합니다...

    모든 코드를 검토하고 필요한 경우 특정 기호에 대해 변수 getter를 사용합니다.
    그리고 이 문자가 호출될 때 trawl 함수에 전달합니다.

    TrailingStop(EURUSD);     // Тралим ЕвроБаксы
    
    TrailingStop("");         // Тралим символ графика

    또는

    TrailingStop(NULL);         // Тралим символ графика

    그게 더 명확해?

     
    artmedia70 :
    함수에 전달된 쌍의 데이터를 기반으로 후행 코드의 변수에 값을 할당합니다. 후행 코드를 완료해야 합니다... 예를 들어, Bid 변수는 선언만 해서는 안 됩니다.

    할당된 값으로 선언됩니다.

    각기

    예를 들어 다음과 같이 다르게 작성해야 합니다.

    또는 PriceBid와 같은 다른 변수를 만들고 작성하십시오.

    그리고 나중에 코드에서 Bid 대신 PriceBid를 사용합니다...

    모든 코드를 검토하고 필요한 경우 특정 기호에 대해 변수 getter를 사용합니다.
    그리고 이 문자가 호출될 때 trawl 함수에 전달합니다.

    또는

    그게 더 명확해?





    너무 이해할 수 있습니다. 어떤 통화 쌍을 어떤 순간에 나에게 이체해야 하는지 알 수 없습니다. 예를 들어 이러한 쌍에 대해 4개의 주문이 열려 있는 것과 이러한 쌍이 정확히 무엇을 전송해야 하는지에 대한 정보를 어디에서 얻을 수 있습니까?

    내가 옳은 일을하고 있는지 아닌지 모르겠지만 .. 일반적으로 ....

    в блоке start  определяю открытые ордера и определяю по каким парам они открыты
     for ( int i= 0 ; i< OrdersTotal (); i++) 
          { 
          if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) break ; 
          if (OrderSymbol()== "EURUSD" ) {sy= "EURUSD" ;MinStop=MarketInfo(sy,MODE_STOPLEVEL); break; }
          if (OrderSymbol()== "GBPUSD" ) {sy= "GBPUSD" ;MinStop=MarketInfo(sy,MODE_STOPLEVEL); break; }
           
          } 
      TrailingStop(sy);
    
    а в функции делаю следующее
    
    void TrailingStop( string sy)
    { 
       if (TrailingStop<MinStop) return ; 
       int ask, bid, open, stop, level,point; 
       for ( int i= 0 ; i< OrdersTotal (); i++) 
          { 
          if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) break ; 
          if (OrderSymbol()==sy)  
          bid=MarketInfo(sy,MODE_BID);
          ask=MarketInfo(sy,MODE_ASK);
          point=MarketInfo(sy,MODE_POINT);
          if (OrderType()==OP_BUY) 
             { 
             bid= MathRound (bid/point); 
             open= MathRound (OrderOpenPrice()/point); 
             stop= MathRound (OrderStopLoss()/point); 
             level=bid-TrailingStop; 
             if (level<open || level>bid-MinStop) continue ; 
             if (stop> 0 && stop>=level) continue ; 
             OrderModify(OrderTicket(),OrderOpenPrice(),level*point,OrderTakeProfit(), 0 , White ); 
             Print ( "трал сдвинут" );
             //ShowError(); 
             } 
          if (OrderType()==OP_SELL) 
             { 
             ask= MathRound (ask/point); 
             open= MathRound (OrderOpenPrice()/point); 
             stop= MathRound (OrderStopLoss()/point); 
             level=ask+TrailingStop; 
             if (level>open || level<ask+MinStop) continue ; 
             if (stop> 0 && stop<=level) continue ; 
             OrderModify(OrderTicket(),OrderOpenPrice(),level*point,OrderTakeProfit(), 0 , White ); 
             //ShowError(); 
             Print ( "трал сдвинут" );
             } 
          } 
    }

    그러나 어떤 이유로 인해 결국 EURUSD 오류가 발생합니다. 0 나누기 - 이 오류는 분명히 변수 0의 어딘가에, 아마도 나누기와 같은 작업 중에 있을 것이라고 말합니다. 올바르게 구현하려고 하고 있습니까?

     
    zheleznii :

    정수 a1;

    int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');
    FileWrite(핸들, a1);

    파일 닫기(핸들);
    파일에서 a1=5;

    기본에 대한 오해가 있어 설명해주세요 - 제안사항 추가

    int handle=FileOpen("a1.csv",FILE_READ|FILE_WRITE,';');
    여기서 a1에는 값 5가 할당됩니다.

    파일 닫기(핸들);

    정말 필요한

    그래서, 순서대로.

    최신 데이터만 필요한 경우 이전 데이터를 저장하는 이유는 무엇입니까? ("쓰기 전"은 FILE_READ|FILE_WRITE 모드 의 조합으로 발생합니다).
    따라서 사용하는 것이 더 합리적입니다. FILE_CSV|FILE_WRITE 모드는 새 데이터를 쓰기 전에 이전 레코드를 삭제합니다.

    4개의 변수를 파일에 쓰기 시작합니다.

     //+------------------------------------------------------------------+
    int start(){
       int handle;
       int a1 = 3 ;
       double punkt = 0.4 ;
       double nn = 1128 ;
       double mm = 1000 ;
    
       handle= FileOpen ( "a1.csv" , FILE_CSV | FILE_WRITE , ';' );
       FileWrite (handle,a1,punkt,nn,mm);
       FileClose (handle);           
    }
    //+------------------------------------------------------------------+

    기억해야 할 주요 사항은 변수를 쓰는 순서입니다. 같은 순서로 읽을 것이기 때문입니다.

    파일에서 변수로 데이터를 읽기 시작합니다.

     //+------------------------------------------------------------------+
    int start(){
       int handle;
       int a;
       double p;
       double n;
       double m;   
       handle= FileOpen ( "a1.csv" , FILE_CSV | FILE_READ , ';' );         
       
       a = FileReadNumber (handle);    //считываем первую цифру, соответствующую переменной a1 и далее по порядку...
       p = FileReadNumber (handle);    //punkt
       n = FileReadNumber (handle);    //nn
       m = FileReadNumber (handle);    //mm
       
       FileClose (handle);           
    }
    //+------------------------------------------------------------------+

    FileReadNumber () 함수를 사용하여 적어둔 순서대로 숫자를 차례로 읽습니다.
    사실 그게 다예요. 복잡한 건 없어요 :)

     
    Infinity :


    너무 이해할 수 있습니다. 어떤 통화 쌍을 어떤 순간에 나에게 이체해야 하는지 알 수 없습니다. 예를 들어 이러한 쌍에 대해 4개의 주문이 열려 있는 것과 이러한 쌍이 정확히 무엇을 전송해야 하는지에 대한 정보를 어디에서 얻을 수 있습니까?

    내가 옳은 일을하고 있는지 아닌지 모르겠지만 .. 일반적으로 ....

    그러나 어떤 이유로 인해 결국 EURUSD 오류가 발생합니다. 0 나누기 - 이 오류는 분명히 변수 0의 어딘가에, 아마도 나누기와 같은 작업 중에 있을 것이라고 말합니다. 올바르게 구현하려고 하고 있습니까?

    변수 에 값을 할당하는 각 작업 후 또는 각 나누기 작업 전에 출력물을 만들어 0이 나타나는 위치를 결정하고 이것에서 춤을 추십시오.