도움이 필요합니다 - 페이지 8

 
qgmql :

이 코드는 괜찮습니까? 그렇지 않은 경우 링크 대신 코드를 작성하십시오. 여전히 혼란스럽습니다.


아니요 https://www.mql5.com/en/forum/133792/page3#550831

특정 기호에서 거래되는 로트에 대해 pipvalue를 제공합니다.

 

1. 일부 매수 주문이 개설되어 있고 하나의 매수 보류 주문이 접수되었습니다. 모든 주문은 동일한 통화 쌍 에 있습니다. EA가 마지막으로 열린 주문만 선택하여 중지 제한을 확인하는 방법은 무엇입니까?

2. 모든 개설 주문은 tp 20으로 다른 가격에 배치되었습니다. ea가 마지막 주문을 제외한 모든 개설 주문을 수정하고, 마지막으로 열린 주문의 중지 제한으로 스탑 리밋을 변경할 수 있습니까?

예시:

Sr    type   price     tp
1      buy     1.23950    1.23750
------------------------------
# buylimit   1.23750    1.23550

//////////////////////////////

1     buy     1.23950    1.23550 // tp modified and now equal to 2nd tp
2     buy     1.23750    1.23550 // 2nd tp
------------------------------
# buylimit   1.23550    1.23350

//////////////////////////////

1     buy     1.23950    1.23350 // tp modified and now equal to 3rd tp
2     buy     1.23750    1.23350 // tp modified and now equal to 3rd tp
3     buy     1.23550    1.23350 // 3rd tp
------------------------------
# buylimit   1.23350    1.23150
 

약간의 혼동...

 //Signal Filter
#define XXX   0
#define AAA   1
#define BBB   2

int SignalS = XXX;

if (SignalS & AAA != 0 )
OrderSend ( NULL , OP_BUY , LotSize, Ask , Slippage, SL, TP, WindowExpertName (), MagicID, 0 , Blue);

이전 편집기는 강조 표시된 줄을 허용하지만 새 편집기는 "Expression not boolean" 경고를 표시합니다.

그때 시도했는데...

 if (SignalS && AAA != 0 )
//or
if (SignalS != 0 & AAA != 0 )

이제 새 편집기는 둘 다 허용하지만... 강조 표시된 줄과 동일하게 작동하는 것은 무엇입니까? 둘 다 사실이라면 어느 것을 사용해야합니까? ( 더 편리하게? )

추신: 아래 코드는 새 편집기에서도 허용됩니다...

 if ((SignalS & AAA) != 0 )

새 편집기는 세 가지 모두를 허용하지만... 강조 표시된 줄과 동일하게 작동하는 것은 무엇입니까? 모두 사실이라면 어느 것이 더 편리 할까요?

 
qgmql : 새 편집기는 세 가지 모두를 허용하지만... 강조 표시된 줄과 동일하게 작동하는 편집기는 무엇입니까? 모두 사실이라면 어느 것이 더 편리 할까요?
  1. 비트 마스크를 사용하지 마십시오
     //Signal Filter
    #define XXX   0
    #define AAA   1
    #define BBB   2
    
    int SignalS = XXX;
    
    if (SignalS & AAA != 0 )
     enum eSignals = {XXX, AAA, BBB};
    
    eSignals SignalS = XXX;
    
    if (SignalS == AAA)
    
    자체 문서화 코드.

  2. 비트 마스크 사용:
    빌드 600+에서는 != 비트 보다 우선 순위가 높으며 , 반드시 사용해야 합니다.
    (SignalS & AAA) != 0
    이전 빌드에서 비트 단위 로 곱셈보다 높았습니다.

    작업

    설명

    실행 명령

    ()

    []

    .

    함수 호출

    배열 요소 참조

    구조 요소 참조

    왼쪽에서 오른쪽으로

    !

    ~

    ++

    --

    (유형)

    크기

    논리적 부정

    비트 부정(보수)

    사인 변경

    1씩 증가

    1씩 감소

    타이프캐스팅

    바이트 단위의 크기 결정

    오른쪽에서 왼쪽으로

    *

    /

    %

    곱셈

    분할

    모듈 부문

    왼쪽에서 오른쪽으로

    +

    덧셈

    빼기

    왼쪽에서 오른쪽으로

    <<

    >>

    왼쪽 시프트

    오른쪽 시프트

    왼쪽에서 오른쪽으로

    <

    <=

    >

    >=

    미만

    작거나 같음

    보다 큰

    크거나 같음

    왼쪽에서 오른쪽으로

    ==

    !=

    동일한

    같지 않음

    왼쪽에서 오른쪽으로

    &

    비트 AND 연산

    왼쪽에서 오른쪽으로

    ^^

    비트 배타적 OR

    왼쪽에서 오른쪽으로

    |

    비트 OR 연산

    왼쪽에서 오른쪽으로

    &&

    논리 AND 연산

    왼쪽에서 오른쪽으로

    ||

    논리적 OR 연산

    왼쪽에서 오른쪽으로

    ?:

    조건 연산자

    오른쪽에서 왼쪽으로

    =

    *=

    /=

    %=

    +=

    -=

    <<=

    >>=

    &=

    ^=

    |=

    과제

    할당을 통한 곱셈

    할당이 있는 분할

    과제가 있는 모듈

    할당과 함께 추가

    대입으로 빼기

    할당이 있는 왼쪽 시프트

    할당이 있는 오른쪽 시프트

    할당이 있는 비트 AND

    할당이 있는 배타적 OR

    할당이 있는 비트 OR

    오른쪽에서 왼쪽으로

    ,

    반점

    왼쪽에서 오른쪽으로

     () 함수 호출 왼쪽에서 오른쪽으로
    [] 배열 요소 참조
    
    ! 논리적 부정 오른쪽에서 왼쪽으로
    - 사인 변경 작업
    ++ 증분
    -- 감소
    ~ 비트 부정(보수)
    
    & 비트 연산 AND 왼쪽에서 오른쪽으로
    | 비트 연산 OR
    ^ 비트 연산 배타적 OR
    << 왼쪽 시프트
    >> 오른쪽 시프트
    
    * 왼쪽에서 오른쪽으로 곱하기
    / 분할
    % 모듈 부문
    
    + 추가 왼쪽에서 오른쪽으로
    - 빼기
    
    < 보다 작음 왼쪽에서 오른쪽으로
    <= 작거나 같음
    > 보다 큼
    >= 크거나 같음
    == 같음
    != 같지 않음
    
    || 논리 OR 왼쪽에서 오른쪽으로
     && 논리적 AND 왼쪽에서 오른쪽으로
     = 할당 오른쪽에서 왼쪽으로
    += 과제 추가
    -= 할당 빼기
    *= 할당 곱셈
    /= 할당 분할
    %= 할당 모듈
    >>= 할당 오른쪽 시프트
    <<= 할당 왼쪽 시프트
    &= 할당 비트 AND
    |= 할당 비트 OR
    ^= 할당 배타적 OR
    
    , 쉼표 왼쪽에서 오른쪽으로
 

WHRoeder 는 귀하의 코드를 찾았고(마지막 시장 주문 선택) tp 가격을 확인하고 이전 주문에 동일한 tp 가격을 설정하기 위해 강조 표시된 라인을 추가했습니다.

 int PositionIndex;     //  <-- this variable is the index used for the loop

int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool
double Ord_TP= 0 ;
TotalNumberOfOrders = OrdersTotal ();     // <-- we store the number of Orders in the variable

for (PositionIndex = TotalNumberOfOrders - 1 ; PositionIndex >= 0 ; PositionIndex --)   //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO !
   {
   if ( ! OrderSelect (PositionIndex, SELECT_BY_POS , MODE_TRADES ) ) continue ;   // <-- if the OrderSelect fails advance the loop to the next PositionIndex
   
   if ( OrderMagicNumber () == MagicNo       // <-- does the Order's Magic Number match our EA's magic number ? 
      && OrderSymbol () == Symbol ()         // <-- does the Order's Symbol match the Symbol our EA is working on ? 
      && ( OrderType () == OP_BUY            // <-- is the Order a Buy Order ? 
      ||   OrderType () == OP_SELL ) )       // <-- or is it a Sell Order ?
   if ( OrderTakeProfit ()> 0 ) 
   Ord_TP = OrderTakeProfit (); break ;
   if ( OrderTakeProfit () == Ord_TP) continue ;
     OrderModify ( OrderTicket (), 0 , 0 ,Ord_TP, 0 ,CLR_NONE);
       //if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               // <-- try to close the order
         //Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  // <-- if the Order Close failed print some helpful information 
      
   } //  end of For loop

한줄 추가...

 if ( OrderTakeProfit ()> 0 ) 
   Ord_TP = OrderTakeProfit (); break ;
   if ( OrderTakeProfit () == Ord_TP) continue ;
   if ( OrderTakeProfit () != Ord_TP)
     OrderModify ( OrderTicket (), 0 , 0 ,Ord_TP, 0 ,CLR_NONE);

제가 틀렸다면 안내 부탁드립니다.

(모든 시장가+보류 주문 유형은 매수 만 하고 매도 는 안 하거나 매도만 하고 매수는 안 하는 것이고 나는 모든 시장가 주문 의 tp가 매번 새로운 시장가 주문 이 열릴 때 변경되기를 원합니다.

이것은 나에게 정말 힘든 일이지만, 나는 그것을 하고 싶다. :(

 
중괄호를 사용하지 않았기 때문에 들여쓰기가 잘못되었습니다.
 if ( OrderTakeProfit ()> 0 ) 
   Ord_TP = OrderTakeProfit (); break ;
   if ( OrderTakeProfit () == Ord_TP) continue ;
   if ( OrderTakeProfit () != Ord_TP)
     OrderModify ( OrderTicket (), 0 , 0 ,Ord_TP, 0 ,CLR_NONE);
코드가 실제로 무엇인지
 if ( OrderTakeProfit ()> 0 ) 
   Ord_TP = OrderTakeProfit (); 
break ;
/*NOTREACHED
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
*/
 
상황이 복잡해지고 있습니다. 처음부터 코드를 작성해야 한다고 생각합니다. 여기에 코드의 각 부분을 붙여넣겠습니다. 어쩌면 내가 더 잘 이해할 수 있습니다.