초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 17

 
Babu Bonappan :

내가 이해하는 OrderOpenPrice는 내가 필요한 것을 정확히 제공합니다. 그러나 예금 통화 가 달러이고 거래 쌍이 EUR/USD인 경우에만 가능합니다. 이 경우 OrderOpenPrice에서는 주문 개시 시점의 예금 통화에 대한 기준 통화의 환율이 유지되어 어느 것을 알면 쉽게 마진을 계산할 수 있습니다.

그러나 이러한 조건 중 하나 이상이 충족되지 않으면 단일 주문에 대한 마진 금액을 얻는 방법은 무엇입니까? 개통 당시의 예치통화 대비 호가의 기준통화 환율은 어디서 알 수 있나요?

예, 초 단위까지 정확한 주문 개시 시간이 있습니다. 그러나 우리는 무엇을 얻을 수 있습니까? 최대 - 원하는 악기의 분 촛불 매개 변수. 그러나 마진이 계산된 비율의 정확한 값은 아닙니다. 그러나 AccountMargin 함수는 어떻게 든 그것을 얻습니다! 정확히 어떻게 이해하고 싶습니다.

마진을 계산하려면 세 가지 공식이 필요합니다.

예금 통화에 따라 모든 통화 쌍의 마진을 계산합니다.

계산에 오류가 있을 수 있는 것은 사실입니다. 그러나 계산 결과를 기본 예금 통화 단위의 1/100으로 반올림하여 얻은 것보다 훨씬 적습니다. 달러라면 센트를 의미합니다.

추신

AccountMargin은 현재, 즉 마지막 값입니다.

 

그러나 MarketInfo ( OrderSymbol (), MODE_MARGINREQUIRED )* Lot 구성을 사용하여 주문을 여는 순간 마진의 정확한 값을 얻으면 어떻게 됩니까? 항상 소수점 이하 두 자리가 포함됩니다. 그런 다음 100을 곱하여 이 주문의 MagicNumber로 저장합니다. 그리고 필요한 경우 거기에서 가져 와서 100.0으로 나눕니다.

맞을까?

 
Babu Bonappan :

그러나 MarketInfo ( OrderSymbol (), MODE_MARGINREQUIRED )* Lot 구성을 사용하여 주문을 여는 순간 마진의 정확한 값을 얻으면 어떻게 됩니까? 항상 소수점 이하 두 자리가 포함됩니다. 그런 다음 100을 곱하여 이 주문의 MagicNumber로 저장합니다. 그리고 필요한 경우 거기에서 가져 와서 100.0으로 나눕니다.

맞을까?

다시 말하지만, 마술사는 이것을위한 것이 아닙니다. 로그 파일에 쓴 다음 읽는 것이 좋습니다.

그것은 모두 그러한 계산의 목적, 프로그램이 설계된 주문 수에 달려 있습니다

브로커나 DC만이 그런 정확한 계산을 필요로 하는 것 같습니다.

이러한 관점에서 로깅은 여전히 최상의 솔루션입니다.

 
Vitaly Muzichenko :

왜 문자 수를 거짓말합니까? 사람들을 오도하지 마십시오.

하아.

정확도가 향상된 계정에 대해 들어본 적이 있습니까?

 

움직이는:

대한 간단한 Expert Advisor를 거의 작성 했지만 한 가지 걸림돌이있었습니다.

로트의 절반을 닫는 것이 올바르게 작동하지 않으며 각 틱에 대해 순서가 수정됩니다.

다음은 구매 수정 블록입니다.

if (CountBuy()>0) //이 함수는 구매 주문 수를 계산합니다.
{ for (int i = OrdersTotal() -1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{ if (OrderMagicNumber()==Magic && OrderType()==OP_BUY && (Ask-OrderOpenPrice())*10000>MinMove) //가격이 지표에서 필요한 이동을 통과한 경우
SL=NormalizeDouble(Ask-(MinMove*10)*포인트, 자릿수); //여기서 스톱을 손익분기점으로 변경합니다.
if(!OrderClose(Ticket,Lots/2,Ask,Slippage,Black)) //로트의 절반을 마감하려고 합니다.
Print("구매 로트의 절반을 마감하는 동안 오류가 발생했습니다.");
if(!OrderModify(Ticket,OrderOpenPrice(),SL,TP,0)) //나머지는 여기서 손익분기점으로 재정렬
Print("매수할 손익분기점 수정 오류");

} } }


 
Vladimir Karputov :

움직이는:

바실리 다닐로프 , 2016.12.02 07:18

먼저 Lot/2 대신 NormalizeDouble (OrderLot()/2,2)을 사용해 보십시오.

그리고 읽을 수 있도록 "SRC" 버튼을 통해 게시물 에 코드를 붙여넣습니다.

 
제가 이해할 수 없다고 말해주세요. 외부 지표에 대한 간단한 Expert Advisor를 거의 작성 했지만 한 가지 걸림돌이있었습니다.

블록에 OrederClose가 있으면 로트의 절반이 즉시 닫히고 OrderModify가 더 이상 작동하지 않습니다.

OrederClose를 제거하면 OrderModify는 각 틱의 순서를 수정합니다.

다음은 구매 수정 블록입니다.

   if (CountBuy()> 0 ) //В этой функции считается кол-во ордеров на покупку
   { for ( int i = OrdersTotal () - 1 ; i>= 0 ; i--)
     { if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {   if ( OrderMagicNumber ()==Magic && OrderType ()== OP_BUY && ( Ask - OrderOpenPrice ())* 10000 >MinMove) //Если цена прошла необходимое движение из индикатора
      SL= NormalizeDouble ( Ask -(MinMove* 10 )* Point , Digits ); //Тут меняю стоп на безубыток
       if (! OrderClose (Ticket,Lots/ 2 , Ask ,Slippage,Black)) //Пытаюсь закрыть половину лота
       Print ( "Ошибка закрытия половины лота на покупку" );
       if (! OrderModify (Ticket, OrderOpenPrice (),SL,TP, 0 )) //Тут переставляю оставшуюся часть в безубыток
       Print ( "Ошибка модификации в безубыток на покупку" );

   }    }   }
가격이 MinMove에 전달되면 주문의 절반이 마감되고 후반이 한 번 손익분기점에 도달하도록 하는 방법은 무엇입니까?
 
Vasiliy Danilov :
제가 이해할 수 없다고 말해주세요. 외부 지표에 대한 간단한 Expert Advisor를 거의 작성 했지만 한 가지 걸림돌이있었습니다.

블록에 OrederClose가 있으면 로트의 절반이 즉시 닫히고 OrderModify가 더 이상 작동하지 않습니다.

OrederClose를 제거하면 OrderModify는 각 틱의 순서를 수정합니다.

다음은 구매 수정 블록입니다.

   if (CountBuy()> 0 ) //В этой функции считается кол-во ордеров на покупку
   { for ( int i = OrdersTotal () - 1 ; i>= 0 ; i--)
     { if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {   if ( OrderMagicNumber ()==Magic && OrderType ()== OP_BUY && ( Ask - OrderOpenPrice ())* 10000 >MinMove) //Если цена прошла необходимое движение из индикатора
      SL= NormalizeDouble ( Ask -(MinMove* 10 )* Point , Digits ); //Тут меняю стоп на безубыток
       if (! OrderClose (Ticket,Lots/ 2 , Ask ,Slippage,Black)) //Пытаюсь закрыть половину лота
       Print ( "Ошибка закрытия половины лота на покупку" );
       if (! OrderModify (Ticket, OrderOpenPrice (),SL,TP, 0 )) //Тут переставляю оставшуюся часть в безубыток
       Print ( "Ошибка модификации в безубыток на покупку" );

   }    }   }
가격이 MinMove에 전달되면 주문의 절반이 마감되고 후반이 한 번 손익분기점에 도달하도록 하는 방법은 무엇입니까?

로트의 절반을 닫는 실수로 충돌하므로 수정되지 않습니다. 위의 내 게시물에 따라 수정하십시오.

그리고 이것을 한 번 하려면 손익분기점을 고정된 포인트 수로 설정하고 이 숫자가 일치하는지 여부에 대해 주문의 이익실현을 확인하는 조건을 추가해야 합니다.

그리고 주문 수정 블록에서 이러한 조건을 통과할 때 반을 닫는다.

 
Alexey Kozitsyn :
아니요. 당신이하고있는 일을 이해하려고 노력하십시오. 당신이 작성한 것은 단지 함수 프로토타입 (즉, 설명, 기능)일 뿐입니다. 저것들. 방금 문서에서 일부를 찢었습니다. 당신은 그것을 사용할 필요가 있습니다. 저것들. 인수를 자신의 값으로 대체하십시오. 그리고 함수는 결과를 반환합니다. 또한 이 결과를 처리해야 합니다.

답변 감사합니다 ... 인터넷의 바닥을 삽질했습니다. StringFind 기능을 사용하는 예는 거의 없습니다. 내가 찾은 것에서 매개 변수는 다음과 같아야한다고 결론지었습니다.

int 문자열 찾기 (

       코멘트 = 주문 코멘트 ()   // 찾고자 하는 문자열
       OrderStopLoss , OrderTakeProfit // 우리가 찾고 있는 것
    정수        start_pos=0     // 검색을 시작할 위치에서

);

...제가 틀렸다면 고쳐주세요...

 
Vitaly Muzichenko :

왜 문자 수를 거짓말합니까? 사람들을 오도하지 마십시오.

모든 브로커는 다른 포인트 를 가지고 있습니다
사유: