-----------------------------------------------------------------+ //| Opening and Closeing.mq4 | //| Copyright © 2010, Ben banta | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, Ben banta" //+------------------------------------------------------+ //| Closing My Way | //+------------------------------------------------------+ double ATR; double Slippage = 3 ; double StopLoss_Buy; double StopLoss_Sell; double Lots= 0.4 ; double MagicNumber; int ticket; int order; //----------------- Closing Sell --------------- int start() { for ( int index = OrdersTotal () - 1 ; index >= 0 ; index--) { if ( OrderSelect (index, SELECT_BY_TICKET) // existing orders && OrderMagicNumber() == MagicNumber // with my MN && OrderSymbol() == Symbol () // with my symbol ) { if (OrderType() == OP_SELL) order = OrderTicket(); if (OrderTicket() == OrderOpenPrice() + (ATR* 2 )) // ATR*2 above Sell. Hard Stop { OrderClose(OrderTicket(),OrderLots(), 3 , Blue ); Print ( "Sell order closed with Hard Stop" ); } else { Print ( "Error closing Sell Hard Stop" , GetLastError ()); } //ENDif (OrderTicket() == OrderOpenPrice() + (ATR*2)) //---------- Closeing Buy ------------- if (OrderType() == OP_BUY) order = OrderTicket(); if (OrderTicket() == OrderOpenPrice() - (ATR* 2 )) // ATR*2 below Buy. Hard Stop { OrderClose(OrderTicket(),OrderLots(), 3 , Red ); Print ( "Buy order closed with Hard Stop" ); } else { Print ( "Error closing Buy Hard Stop" , GetLastError ()); return ( 0 ); } //ENDif (OrderTicket() == OrderOpenPrice() - (ATR*2)) } //ENDIf ( OrderSelect(index, SELECT_BY_TICKET) etc } // END for loop //------------ Opening Buy ----------------- if ( OrdersTotal () < 1 ) // Checking for any working orders { if (Ask > High[iHighest( NULL , 0 ,MODE_HIGH, 20 , 1 )]) // When this condition is true, // with no working orders { ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage, 0 , 0 , " " , 0 , 0 , Blue ); // Buy! Useing these parameters if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "Buy Order Was a Big Success :" , OrderOpenPrice()); } else Print ( "Error Opening Buy Order :" , GetLastError ()); //ENDif (ticket>0) return ( 0 ); } //ENDif (Ask > High[iHighest(NU... etc //--------------- Opening Sell ---------------- if (Bid < Low[iLowest( NULL , 0 ,MODE_LOW, 20 , 1 )]) //When this condition is true, //with no working orders { ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage, 0 , 0 , " " , 0 , 0 , Red ); //Sell! Useing these parameters if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "Sell Order Was a Big Success :" , OrderOpenPrice()); } //ENDif (ticket>0) else Print ( "Error Opening Sell Order :" , GetLastError ()); //ENDif (OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) return ( 0 ); } //ENDif (Bid < Low[iLowest(NULL,0,MODE_LOW,20,1)]) return ( 0 ); }//ENDif ( OrdersTotal () < 1 ) } //ENDint start()코드 블록을 읽기 쉽게 만들어야 합니다.
if (OrderTicket() == OrderOpenPrice() - (ATR* 2 ))주문 티켓 은 주문에 대한 핵심적인 매우 큰 정수(아마도 수십억 단위)입니다.
OOP - 2ATR은 가격입니다.
둘은 결코 같지 않을 것이다
OrderClosePrice() == OOP-2ATR 실수는 거의 비교하지 않을 것입니다. 대신 사용:
if ( OrderClosePrice() - OrderOpenPrice()-ATR* 2 <= 0 ) //...
OrderSelect (index, SELECT_BY_TICKET) // existing orders && OrderMagicNumber() == MagicNumber // with my MN && OrderSymbol() == Symbol ()귀하의 orderSend는 매직 넘버를 설정하지 않습니다
주문 티켓은 주문에 대한 핵심적인 매우 큰 정수(아마도 수십억 단위)입니다.
OOP - 2ATR은 가격입니다.
둘은 결코 같지 않을 것이다
OrderClosePrice() == OOP-2ATR 실수는 거의 비교하지 않을 것입니다. 대신 사용:
귀하의 orderSend는 매직 넘버를 설정하지 않습니다
찾아주시고 제안해주셔서 감사합니다. 그러나 나는 즉시 OOP -2ATR을 이해하지 못했다고 말해야 합니다.
OOP = 주문오픈가격. 그것은 처음에 내 머리 위에 바로 갔다. 당신의 설명은 절대적으로 정확합니다. == 기호에 걸렸습니다. OrderClosePrice()는 OrderOpenPrice()에서 (ATR*2)를 뺀 값과 같지 않을 수 있습니다. 잡아주셔서 감사합니다.
내가 당신의 제안을 이해하는지 보자. 여기에서 다시 설명하겠습니다. if(OrderClosePrice()-OOP()-ATR*2 <= 0)
이것은 읽는 것처럼 보입니다(여기서는 임의의 숫자를 사용하겠습니다) OCP = 1.4361, OOP = 1.4321, ATR = 20. 따라서 표현식은 다음과 같습니다.
(1.4321 - 1.4361 - (20*2) <= 0)인 경우 죄송하지만 이해가 되지 않습니다.
같은 그림을 사용하여 표현을 재배열하여 내가 의미하는 바를 보여줄 수도 있습니다. 그러나 프로그램에 삽입했을 때도 작동하지 않았습니다.
새로운 배열은 다음과 같습니다.
만약 (1.4361 >= 1.4321 + (20*2)).
OCP >=OOP + ATR*2인 경우 제어가 다음으로 전달됩니다.
OrderClose(OrderTicket(), OrderLots() 등
다른 관찰은 OrderSend가 매직 넘버를 설정하지 않는다는 것입니다.
프로그램에서 이 부분을 제거해도 될까요? && OrderMagicNumber == MagicNumber,
다시 한 번 감사 드리며 다른 개선 사항이 있으면 감사하겠습니다.
건배
OrderClose ( OrderTicket() , OrderLots() , OrderClosePrice() , 0 ) ;
당신의 응답을 주셔서 감사합니다. 당신이 잘하고 있기를 바랍니다.
제안은 오늘 아침에 삽입되었습니다. 컴파일러가 내가 코딩한 것을 좋아하지 않는다고 말해서 유감입니다. 프로그램의 어떤 설명이 올바르지 않은지 모르겠습니다. 내가 믿는 제안은 괜찮습니다. 프로그램을 다시 게시하고 문제가 될 수 있다고 생각되는 영역에 플래그를 지정합니다. 클로징 전략도 말씀드리겠습니다.
매도 포지션은 Atr*2에 의해 주문 개시 가격 이상에서 중단됩니다. 예를 들어 OOP는 1.4321, Atr = 20, OCP = 1.4361입니다.
그래서 식을 다음과 같이 코딩했습니다.
if(OrderClosePrice >= OrderOpenPrice(), - (ATR*2)) // 조건이 충족되면 제어가 다음으로 전달됩니다.
OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), Blue) ;
참고: 관련성이 있는 경우 OrderSend 문에는 StopLoss() 또는 TakeProfit()이 없습니다.
모두의 도움에 다시 한번 감사드립니다
건배
double ATR; double Slippage = 3 ; double StopLoss_Buy; double StopLoss_Sell; double Lots= 0.4 ; double MagicNumber; int ticket; int order; //----------------- Closing Sell --------------- int start() { for ( int index = OrdersTotal () - 1 ; index >= 0 ; index--) { if ( OrderSelect (index, SELECT_BY_TICKET) // existing orders //&& OrderMagicNumber() == MagicNumber // with my MN && OrderSymbol() == Symbol ()) // with my symbol { if (OrderType() == OP_SELL) order = OrderTicket(); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< if (OrderClosePrice() >= OrderOpenPrice() + (ATR* 2 )) // condition to be met, // control then passes to... { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), Blue ); // OrderClose //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Print ( "Sell order closed with Hard Stop" ); } else { Print ( "Error closing Sell Hard Stop" , GetLastError ()); } //---------- Closeing Buy ------------- if (OrderType() == OP_BUY) order = OrderTicket(); if (OrderClosePrice() <= OrderOpenPrice() - (ATR* 2 )) // ATR*2 below Buy. Hard Stop { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), Red ); Print ( "Buy order closed with Hard Stop" ); } else { Print ( "Error closing Buy Hard Stop" , GetLastError ()); return ( 0 ); } } } //------------ Opening Buy ----------------- if ( OrdersTotal () < 1 ) // Checking for any working orders { if (Ask > High[iHighest( NULL , 0 ,MODE_HIGH, 20 , 1 )]) // When this condition is true, // with no working orders { ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage, 0 , 0 , " " , 0 , 0 , Blue ); // Buy! Useing these parameters if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "Buy Order Was a Big Success :" , OrderOpenPrice()); } else Print ( "Error Opening Buy Order :" , GetLastError ()); return ( 0 ); } //--------------- Opening Sell ---------------- if (Bid < Low[iLowest( NULL , 0 ,MODE_LOW, 20 , 1 )]) //When this condition is true, //with no working orders { ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage, 0 , 0 , " " , 0 , 0 , Red ); //Sell! Useing these parameters if (ticket> 0 ) { if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "Sell Order Was a Big Success :" , OrderOpenPrice()); } else Print ( "Error Opening Sell Order :" , GetLastError ()); return ( 0 ); } return ( 0 ); } }
안녕하세요 허클베리입니다.
귀하의 프로그램을 약간 수정하겠습니다.
당분간은 안녕
"order = OrderTicket();"을 수행하고 orderclose() 함수에서 thit 값을 사용하지 않는 이유는 무엇입니까?
선택한 주문 이 변경될 가능성은 적지만 확실히 식별된 주문 값을 사용하는 것이 더 안전하지 않을까요?
-
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 파란색 );
OrderTicket()은 현재 선택된 티켓 이 될 것입니다 - 내 학습의 이 단계에서
OrderClose()를 수행할 때 어떤 orderticket이 선택되었는지 알 수 없습니다.
//// 편집하다
실제로 "order= OrderTicket()"이 앞의 If 문에서 식별한 티켓인지 확실하지 않습니다.
"order = OrderTicket();"을 수행하고 orderclose() 함수에서 thit 값을 사용하지 않는 이유는 무엇입니까?
선택한 주문이 변경될 가능성은 적지만 확실히 식별된 주문 값을 사용하는 것이 더 안전하지 않을까요?
-
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 파란색 );
OrderTicket()은 현재 선택된 티켓 이 될 것입니다 - 내 학습의 이 단계에서
OrderClose()를 수행할 때 어떤 orderticket이 선택되었는지 알 수 없습니다.
//// 편집하다
실제로 "order= OrderTicket()"이 앞의 If 문에서 식별한 티켓인지 확실하지 않습니다.
관찰과 제안에 감사드립니다. 당신의 시간은 소중합니다.
당신의 추론은 완벽합니다. 선택된 순서에 관해서는 더 이상 확실하지 않습니다. 제안을 시도해 보겠습니다.
다시 한번 감사합니다
건배
모두에게 안녕
구문이 이전보다 개선되기를 바랍니다. 지난 주에 나는 Codersguru를 읽었습니다.
아래 프로그램은 오류가 없지만 컴파일러는 하나의 주문만 기록합니다. 그러나 내 코드는 그것을 닫지 않을 것입니다.
프로그램 상태 --- ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0," ",Blue),
보시다시피 손절매나 이익실현을 삽입하지 않았습니다. 이유, 이미 이와 같이 코딩된 StopLoss 조건이 있습니다 ---
if(OrderTicket() == OrderOpenPrice() - (ATR*2))
{
OrderClose(OrderTicket(), OrderLots(), 3, 파란색)
따라서 다른 StopLoss를 삽입할 필요가 없습니다. 테이크프로핏만큼
이 다른 문제가 해결되면 코딩하겠습니다.
종료 조건을 코딩한 방식인가요, 아니면 구문에 다시 문제가 있습니까?
도움을 주신 모든 분들께 감사드리며 내 문제가 다른 사람들에게 도움이 되길 바랍니다.
건배