그러나 MarketInfo(OrderSymbol(),MODE_MARGINREQUIRED)*Lot 구성을 사용하여 주문을 여는 순간 마진의 정확한 값을 얻으면 어떻게 됩니까? 항상 소수점 이하 두 자리가 포함됩니다. 그런 다음 100을 곱하여 이 주문의 MagicNumber로 저장합니다. 그리고 필요한 경우 거기에서 가져 와서 100.0으로 나눕니다.
내가 이해하는 OrderOpenPrice는 내가 필요한 것을 정확히 제공합니다. 그러나 예금 통화 가 달러이고 거래 쌍이 EUR/USD인 경우에만 가능합니다. 이 경우 OrderOpenPrice에서는 주문 개시 시점의 예금 통화에 대한 기준 통화의 환율이 유지되어 어느 것을 알면 쉽게 마진을 계산할 수 있습니다.
그러나 이러한 조건 중 하나 이상이 충족되지 않으면 단일 주문에 대한 마진 금액을 얻는 방법은 무엇입니까? 개통 당시의 예치통화 대비 호가의 기준통화 환율은 어디서 알 수 있나요?
예, 우리는 초 단위까지 정확한 주문 개시 시간을 가지고 있습니다. 그러나 우리는 무엇을 얻을 수 있습니까? 최대 - 원하는 악기의 분 촛불 매개 변수. 그러나 마진이 계산된 비율의 정확한 값은 아닙니다. 그러나 AccountMargin 함수는 어떻게 든 그것을 얻습니다! 정확히 어떻게 이해하고 싶습니다.
OrderOpenPrice - 주문 개시 가격, 그것은 (가격) 한 통화와 다른 통화의 비율입니다.
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("매수할 손익분기점 수정 오류");
} } }
매 틱마다 주문이 수정되지 않도록 if (SL != OrderStopLoss()) modify .... 와 같은 것을 확인할 수 있습니다. 그러면 SL 값이 현재 OrderStopLoss와 다른 경우에만 수정됩니다.
닫을 때 무엇이 잘못되었는지 이해하기 위해 GetLastError() 요청을 넣으십시오. 그러나 일반적으로 OrderClose ... bool testOrCls를 확인하는 것이 좋습니다.
testOrCls=주문 마감 ......
if(! testOrCls) 인쇄( GetLastError() );
저것들. 오류가 있으면 오류 코드를 요청하고 오류가 없으면 오류 코드를 요청하지 않습니다.
블록에 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에 전달되면 주문의 절반이 마감되고 후반이 한 번 손익분기점에 도달하도록 하는 방법은 무엇입니까?
그건 그렇고, 이제 SELECT_BY_POS 위치로 OrderSelect를 발견했지만 티켓 선택은 어디에 있습니까?
하지만 이제 EUR/JPY(또는 EUR/CHF)에 대해 동일한 결과를 얻고 싶습니다. 분명히 OrderOpenPrice() 대신에 표준 랏의 크기에 기본 통화와 예금 통화 의 비율을 곱해야 합니다(제 경우에는 EUR/USD). 근데 이게 무슨 코스야? 포지션을 열었을 때 있었던 것입니까, 아니면 지금 있는 것 (이 포지션의 마진 금액을 알고 싶은 순간)?
블록에 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에 전달되면 주문의 절반이 마감되고 후반이 한 번 손익분기점에 도달하도록 하는 방법은 무엇입니까?
그러나 MarketInfo ( OrderSymbol (), MODE_MARGINREQUIRED )* Lot 구성을 사용하여 주문을 여는 순간 마진의 정확한 값을 얻으면 어떻게 됩니까? 항상 소수점 이하 두 자리가 포함됩니다. 그런 다음 100을 곱하여 이 주문의 MagicNumber로 저장합니다. 그리고 필요한 경우 거기에서 가져 와서 100.0으로 나눕니다.
맞을까?
내가 이해하는 OrderOpenPrice는 내가 필요한 것을 정확히 제공합니다. 그러나 예금 통화 가 달러이고 거래 쌍이 EUR/USD인 경우에만 가능합니다. 이 경우 OrderOpenPrice에서는 주문 개시 시점의 예금 통화에 대한 기준 통화의 환율이 유지되어 어느 것을 알면 쉽게 마진을 계산할 수 있습니다.
그러나 이러한 조건 중 하나 이상이 충족되지 않으면 단일 주문에 대한 마진 금액을 얻는 방법은 무엇입니까? 개통 당시의 예치통화 대비 호가의 기준통화 환율은 어디서 알 수 있나요?
예, 우리는 초 단위까지 정확한 주문 개시 시간을 가지고 있습니다. 그러나 우리는 무엇을 얻을 수 있습니까? 최대 - 원하는 악기의 분 촛불 매개 변수. 그러나 마진이 계산된 비율의 정확한 값은 아닙니다. 그러나 AccountMargin 함수는 어떻게 든 그것을 얻습니다! 정확히 어떻게 이해하고 싶습니다.
OrderOpenPrice - 주문 개시 가격, 그것은 (가격) 한 통화와 다른 통화의 비율입니다.
AccountMargin - 모든 미결 주문에 대한 총 계정 마진을 제공합니다.
움직이는:
바실리 다닐로프 , 2016.12.02 07:18
제가 이해할 수 없다고 말해주세요. 외부 지표에 대한 간단한 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("매수할 손익분기점 수정 오류");
} } }
매 틱마다 주문이 수정되지 않도록 if (SL != OrderStopLoss ()) modify .... 와 같은 것을 확인할 수 있습니다. 그러면 SL 값이 현재 OrderStopLoss와 다른 경우에만 수정됩니다.
닫을 때 무엇이 잘못되었는지 이해하기 위해 GetLastError () 요청을 넣으십시오. 그러나 일반적으로 OrderClose ... bool testOrCls를 확인하는 것이 좋습니다.
testOrCls=주문 마감 ......
if(! testOrCls) 인쇄( GetLastError () );
저것들. 오류가 있으면 오류 코드를 요청하고 오류가 없으면 오류 코드를 요청하지 않습니다.
답변 감사합니다 ... 인터넷의 바닥을 삽질했습니다. StringFind 기능을 사용하는 예는 거의 없습니다. 내가 찾은 것에서 매개 변수는 다음과 같아야한다고 결론지었습니다.
int 문자열 찾기 (
끈 코멘트 = 주문 코멘트 () // 찾고자 하는 문자열끈 OrderStopLoss , OrderTakeProfit // 우리가 찾고 있는 것
정수 start_pos=0 // 검색을 시작할 위치에서
);
...제가 틀렸다면 고쳐주세요...
조금 그런 식으로 작동하지 않습니다. 이 함수에 대한 인수로 지정됨 1) 검색할 문자열. 2) 찾을 문자의 조합; 3) 검색 시작(기본값 - 항목 1에 따른 문자열의 null 문자부터).
검색된 하위 문자열이 시작되는 문자열의 위치 번호를 반환하거나 하위 문자열을 찾을 수 없는 경우 -1을 반환합니다.
즉, 다음과 같이 작성해야 합니다.
로트의 절반을 닫는 실수로 충돌하므로 수정되지 않습니다. 위의 내 게시물에 따라 수정하십시오.
그리고 이것을 한 번 하려면 손익분기점을 고정된 포인트 수로 설정하고 이 숫자가 일치하는지 여부에 대해 주문의 이익실현을 확인하는 조건을 추가해야 합니다.
그리고 주문 수정 블록에서 이러한 조건을 통과할 때 반을 닫는다.
제가 이해할 수 없다고 말해주세요. 외부 지표에 대한 간단한 Expert Advisor를 거의 작성 했지만 한 가지 걸림돌이있었습니다.
블록에 OrederClose가 있으면 로트의 절반이 즉시 닫히고 OrderModify가 더 이상 작동하지 않습니다.
OrederClose를 제거하면 OrderModify는 각 틱의 순서를 수정합니다.
다음은 구매 수정 블록입니다.
{ 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 ( "Ошибка модификации в безубыток на покупку" );
} } }
그건 그렇고, 이제 SELECT_BY_POS 위치로 OrderSelect를 발견했지만 티켓 선택은 어디에 있습니까?
OrderClose(주문 티켓()
MQL4를 사용하여 터미널에서 각 오픈 포지션에 대한 마진을 얻는 방법을 알려주십시오.
나는 보통 이렇게 했다:
EUR/USD를 거래할 때 이 구성은 완벽하게 작동했으며 논리가 정확하다고 확신했습니다.
하지만 이제 EUR/JPY(또는 EUR/CHF)에 대해 동일한 결과를 얻고 싶습니다. 분명히 OrderOpenPrice () 대신에 표준 랏의 크기에 기본 통화와 예금 통화 의 비율을 곱해야 합니다(제 경우에는 EUR/USD). 근데 이게 무슨 코스야? 포지션을 열었을 때 있었던 것입니까, 아니면 지금 있는 것 (이 포지션의 마진 금액을 알고 싶은 순간)?
MODE_MARGINMAINTENANCE 아니요?
그건 그렇고, 이제 SELECT_BY_POS 위치로 OrderSelect를 발견했지만 티켓 선택은 어디에 있습니까?
OrderClose(주문 티켓()
이 스레드에 대해 정말 아무것도 모르십니까?
주문이 선택되면 OrderTicket()은 선택한 주문 의 티켓을 반환합니다. 인덱스 또는 티켓으로 주문을 선택하는 방법은 중요하지 않습니다.
티켓으로 선택할 때 뉘앙스가 있습니다. 풀 은 고려되지 않으며 어떤 목록에서 주문이 선택되었는지 확인하고 마감 시간을 확인해야 합니다.
제가 이해할 수 없다고 말해주세요. 외부 지표에 대한 간단한 Expert Advisor를 거의 작성 했지만 한 가지 걸림돌이있었습니다.
블록에 OrederClose가 있으면 로트의 절반이 즉시 닫히고 OrderModify가 더 이상 작동하지 않습니다.
OrederClose를 제거하면 OrderModify는 각 틱의 순서를 수정합니다.
다음은 구매 수정 블록입니다.
{ 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 ( "Ошибка модификации в безубыток на покупку" );
} } }
부분 폐쇄로 티켓이 변경됩니다. 먼저 손익분기점을 넘은 다음 마감합니다.
또는 논리를 변경하십시오.
A1엑스핏 :
그건 그렇고, 이제 SELECT_BY_POS 위치로 OrderSelect를 발견했지만 티켓 선택은 어디에 있습니까?
OrderClose(주문 티켓()
이 스레드에 대해 정말 아무것도 모르십니까?
주문이 선택되면 OrderTicket()은 선택한 주문 의 티켓을 반환합니다. 인덱스 또는 티켓으로 주문을 선택하는 방법은 중요하지 않습니다.
티켓으로 선택할 때 뉘앙스가 있습니다. 풀 은 고려되지 않으며 어떤 목록에서 주문이 선택되었는지 확인하고 마감 시간을 확인해야 합니다.
그리고 이 주석이 작성된 코드를 보면? 너무 명확하지 않습니다 ...
{ 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)) //Пытаюсь закрыть половину лота Какой тикет?
그리고 이 주석이 작성된 코드를 보면? 너무 명확하지 않습니다 ...
{ 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)) //Пытаюсь закрыть половину лота Какой тикет?