khorosh : 그래서 여기에서 내가 틀렸다. 주문 시작 라인에서 SL과 TP를 모두 당겨야 하는 경우 끌기 항목을 찾는 방법에 대한 문제가 발생하기 때문에 더 이상 작동하지 않습니다. 따라서 실제 차트에서 커서가 이동하는 방향으로 동작의 유형을 식별하거나 키보드 키 누름을 사용하거나 동작의 유형을 설정하는 버튼을 생성하는 것이 필요합니다. 첫 번째 옵션은 실제 차트에서 사용되며 제 생각에는 가장 좋습니다.
Ctrl+마우스 - 중지. 그냥 마우스 - 가져 가라. 그리고 필요한 곳 어디든 가지고 가십시오.
Artyom Trishkin : 예, 이해할 수 있습니다. 이것이 의미하는 바입니다. 주문에 정류장이 없으면 주문 자체의 라인을 드래그할 수 있으며 스톱은 우리가 라인을 "드래그"하는 위치에 배치됩니다. 테이크 처리가 되지 않는 경우입니다. 그리고 정류장과 테이크 모두 처리가 있지만 주문에 둘 중 하나가 없으면 주문 라인을 드래그하면 무엇을 설정해야합니까? 가져갈까, 멈출까?
오늘 아침 새로운 마음으로 해결책을 찾았습니다. 또한 수정 기능에서 추가 루프를 제거했습니다. 두 가지 옵션에 대한 수정 기능을 만들었습니다.
1) 주문서에 SL, TP가 설정되어 있지 않은 경우 주문을 클릭하면 50p 거리에 SL과 TP가 팝업됩니다. 필요한 경우 필요한 위치로 끕니다. 주문에 이미 SL 및 TP가 있는 경우 원하는 위치로 드래그하십시오.
2) 실제 차트에서 수행되는 방식의 변형입니다. SL과 TP가 없으면 주문 라인에서 꺼내서 원하는 곳으로 이동합니다.
첫 번째 옵션:
void ModifySlTp( double priceModify= 0 )
{
double sl= 0 ,tp= 0 ;
if (TicketModifyOrder== 0 )
{
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
{
if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber)
{
if ( MathAbs ( OrderStopLoss ()-priceModify)< 30 * Point ()) {OnSL= true ;}
if ( MathAbs ( OrderTakeProfit ()-priceModify)< 30 * Point ()) {OnTP= true ;}
if ( MathAbs ( OrderOpenPrice ()-priceModify)< 30 * Point ()) {OnOrd= true ;}
{
if (OnSL || OnTP || OnOrd)
{
TicketModifyOrder= OrderTicket (); break ;
}
}
}
}
}
}
if (TicketModifyOrder> 0 )
{
if ( OrderSelect (TicketModifyOrder, SELECT_BY_TICKET ))
{
bool typOrdBuy = OrderType ()== OP_BUY || OrderType ()== OP_BUYSTOP || OrderType ()== OP_BUYLIMIT ;
bool typOrdSell= OrderType ()== OP_SELL || OrderType ()== OP_SELLSTOP || OrderType ()== OP_SELLLIMIT ;
if (OnOrd)
{
if (typOrdBuy)
{
sl = NormalizeDouble ( OrderOpenPrice ()- 500 * Point (), Digits );
tp = NormalizeDouble ( OrderOpenPrice ()+ 500 * Point (), Digits );
}
if (typOrdSell)
{
sl = NormalizeDouble ( OrderOpenPrice ()+ 500 * Point (), Digits );
tp = NormalizeDouble ( OrderOpenPrice ()- 500 * Point (), Digits );
}
}
if (OnSL) {sl= NormalizeDouble (priceModify, Digits );tp= OrderTakeProfit ();}
if (OnTP) {tp= NormalizeDouble (priceModify, Digits );sl= OrderStopLoss ();}
ModifyOrder1(- 1 , sl, tp, 0 );
}
}
}
두 번째 옵션:
void ModifySlTp( double priceModify= 0 )
{
double sl= 0 ,tp= 0;if (TicketModifyOrder== 0 )
{
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
{
if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber)
{
if ( MathAbs ( OrderStopLoss ()-priceModify)< 50 * Point ()) {OnSL= true ;}
if ( MathAbs ( OrderTakeProfit ()-priceModify)< 50 * Point ()) {OnTP= true ;}
if ( MathAbs ( OrderOpenPrice ()-priceModify)< 50 * Point ()) {OnOrd= true ;}
{
if (OnSL || OnTP || OnOrd)
{
TicketModifyOrder= OrderTicket (); break ;
}
}
}
}
}
}
if (TicketModifyOrder> 0 )
{
if ( OrderSelect (TicketModifyOrder, SELECT_BY_TICKET ))
{
bool typOrdBuy = OrderType ()== OP_BUY || OrderType ()== OP_BUYSTOP || OrderType ()== OP_BUYLIMIT ;
bool typOrdSell= OrderType ()== OP_SELL || OrderType ()== OP_SELLSTOP || OrderType ()== OP_SELLLIMIT ;
if (OnOrd)
{
if (typOrdBuy)
{
if (priceModify> OrderOpenPrice ()) {tp= NormalizeDouble (priceModify, Digits );sl= OrderStopLoss ();}
if (priceModify< OrderOpenPrice ()) {sl= NormalizeDouble (priceModify, Digits );tp= OrderTakeProfit ();}
}
if (typOrdSell)
{
if (priceModify< OrderOpenPrice ()) {tp= NormalizeDouble (priceModify, Digits );sl= OrderStopLoss ();}
if (priceModify> OrderOpenPrice ()) {sl= NormalizeDouble (priceModify, Digits );tp= OrderTakeProfit ();}
}
}
if (OnSL) {sl= NormalizeDouble (priceModify, Digits );tp= OrderTakeProfit ();}
if (OnTP) {tp= NormalizeDouble (priceModify, Digits );sl= OrderStopLoss ();}
ModifyOrder1(- 1 , sl, tp, 0 );
}
}
}
이 경우 전역 변수 OnSL, OnTp 및 OnOrd를 선언하는 것을 잊지 말아야 합니다. 또한 TicketModifyOrder가 재설정되는 Expert Advisor에서 이러한 변수의 재설정을 추가하십시오. 글쎄, Expert Advisor에서 일부 변수의 이름과 수정 기능의 이름을 수정하십시오.
나는 세 번째 옵션을 생각해 냈습니다. SL과 TP를 휴대하기 싫으신 분들을 위한 제품입니다. SL 및 TP 설정 알고리즘은 다음과 같습니다. 주문을 한 번 클릭하여 선택(티켓 정의)한 다음 차트에서 SL을 배치하려는 지점을 한 번 클릭합니다(일반적으로 이들은 현지 가격 최소값 뒤에 있는 지점입니다. 및 최대). 이 경우 선택한 지점에 SL이 설정되고, 주문가에서 SL까지의 거리에 Ktr을 곱한 값보다 큰 주문가와 떨어진 지점에 TP가 설정됩니다. Ktr - 외부 변수에 설정된 TP가 SL보다 몇 배나 큰지 나타냅니다. TicketModifyOrder 및 OnOrd는 이제 OnTick() 본문이 아니라 함수 자체에서 재설정됩니다. OnTick() 본문에서 이러한 변수를 재설정하는 것은 제거해야 합니다. 이 버전에서는 SL과 TP를 드래그 앤 드롭하는 것이 가능하겠지만 생각하기에는 너무 게으르다. 필요한 경우 옵션 1로 전환할 수 있습니다. 버튼 형태의 스위치.
그리고 당신은 키보드 버튼과 결합할 수 있습니다;)
그래서 여기에서 내가 틀렸다. 주문 시작 라인에서 SL과 TP를 모두 당겨야 하는 경우 끌기 항목을 찾는 방법에 대한 문제가 발생하기 때문에 더 이상 작동하지 않습니다. 따라서 실제 차트에서 커서가 이동하는 방향으로 동작의 유형을 식별하거나 키보드 키 누름을 사용하거나 동작의 유형을 설정하는 버튼을 생성하는 것이 필요합니다. 첫 번째 옵션은 실제 차트에서 사용되며 제 생각에는 가장 좋습니다.
예, 이해할 수 있습니다. 이것이 의미하는 바입니다. 주문에 정류장이 없으면 주문 자체의 라인을 드래그할 수 있으며 스톱은 우리가 라인을 "드래그"하는 위치에 배치됩니다. 테이크 처리가 되지 않는 경우입니다. 그리고 정류장과 테이크 모두 처리가 있지만 주문에 둘 중 하나가 없으면 주문 라인을 드래그하면 무엇을 설정해야합니까? 가져갈까, 멈출까?
스톱 앤 테이크가 없다면
예를 들어 구매의 경우: 위로 드래그하면 tp, 아래로 드래그하면 sl
스톱 앤 테이크가 없다면
예를 들어 구매의 경우: 위로 드래그하면 tp, 아래로 드래그하면 sl
그래서 터미널에서. 그리고 스톱을 Buy의 이익 영역으로 이동하기 위해 이것이 논의되고 있습니다.
터미널에서처럼 하라고
터미널에서 수행되는 방법은 이미 언급되었습니다. 이제 터미널에서 좋아하지 않는 방법에 대해 설명합니다.
러시아어로 쓰는 것 같다
오늘 아침 새로운 마음으로 해결책을 찾았습니다. 또한 수정 기능에서 추가 루프를 제거했습니다. 두 가지 옵션에 대한 수정 기능을 만들었습니다.
1) 주문서에 SL, TP가 설정되어 있지 않은 경우 주문을 클릭하면 50p 거리에 SL과 TP가 팝업됩니다. 필요한 경우 필요한 위치로 끕니다. 주문에 이미 SL 및 TP가 있는 경우 원하는 위치로 드래그하십시오.
2) 실제 차트에서 수행되는 방식의 변형입니다. SL과 TP가 없으면 주문 라인에서 꺼내서 원하는 곳으로 이동합니다.
첫 번째 옵션:
두 번째 옵션:
이 경우 전역 변수 OnSL, OnTp 및 OnOrd를 선언하는 것을 잊지 말아야 합니다. 또한 TicketModifyOrder가 재설정되는 Expert Advisor에서 이러한 변수의 재설정을 추가하십시오. 글쎄, Expert Advisor에서 일부 변수의 이름과 수정 기능의 이름을 수정하십시오.
감사한 관객들의 박수를 기대합니다. 여러분, 박수를 치고 해산합시다.)
나는 세 번째 옵션을 생각해 냈습니다. SL과 TP를 휴대하기 싫으신 분들을 위한 제품입니다. SL 및 TP 설정 알고리즘은 다음과 같습니다. 주문을 한 번 클릭하여 선택(티켓 정의)한 다음 차트에서 SL을 배치하려는 지점을 한 번 클릭합니다(일반적으로 이들은 현지 가격 최소값 뒤에 있는 지점입니다. 및 최대). 이 경우 선택한 지점에 SL이 설정되고, 주문가에서 SL까지의 거리에 Ktr을 곱한 값보다 큰 주문가와 떨어진 지점에 TP가 설정됩니다. Ktr - 외부 변수에 설정된 TP가 SL보다 몇 배나 큰지 나타냅니다. TicketModifyOrder 및 OnOrd는 이제 OnTick() 본문이 아니라 함수 자체에서 재설정됩니다. OnTick() 본문에서 이러한 변수를 재설정하는 것은 제거해야 합니다. 이 버전에서는 SL과 TP를 드래그 앤 드롭하는 것이 가능하겠지만 생각하기에는 너무 게으르다. 필요한 경우 옵션 1로 전환할 수 있습니다. 버튼 형태의 스위치.