MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1626 1...161916201621162216231624162516261627162816291630163116321633...1953 새 코멘트 Tretyakov Rostyslav 2021.09.26 09:56 #16251 EVGENII SHELIPOV # : 아무것도 바뀌지 않았다 모든 것을 바꿔라... //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { int slipp = MarketInfo( _Symbol , MODE_SPREAD )* 2 ; int minTicket=GetOrderTicket( 0 ); int maxTicket=GetOrderTicket( 1 ); for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderClose(maxTicket, OrderLots(), Bid, slipp)&&OrderClose(minTicket, OrderLots(), Bid, slipp)) Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" ); else Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ()); } } } //+----------------------------------------------------------------------------+ //| Калькуляция профита максимального и минимального ордера в сетке | //+----------------------------------------------------------------------------+ double CalculiteProfit() { double minProfit = 0 , maxProfit = 0 ; for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) { if (OrderTicket() == GetOrderTicket( 0 )) minProfit = OrderProfit(); if (OrderTicket() == GetOrderTicket( 1 )) maxProfit = OrderProfit(); } } } return (minProfit+maxProfit); } //+----------------------------------------------------------------------------+ //| Номер тикета | //| 0-минимального ордера в сетке | //| 1-максимального ордера в сетке | //+----------------------------------------------------------------------------+ int GetOrderTicket( int tick=- 1 ) { int min_ticket = INT_MAX ; int max_ticket = 0 ; int result=- 1 ; { for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--) { if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { if (OrderTicket() < min_ticket) min_ticket = OrderTicket(); if (OrderTicket() > max_ticket) max_ticket = OrderTicket(); } } } } } if (tick== 0 ) {result=min_ticket;} else if (tick== 1 ) {result=max_ticket;} else {result=- 1 ;} return (result); } //+----------------------------------------------------------------------------+ Tretyakov Rostyslav 2021.09.26 10:21 #16252 EVGENII SHELIPOV # : 아무것도 바뀌지 않았다 그 쯤... //--- global parameters bool closeAll= false ; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick () { //--- if (CalculiteProfit() > ProfitMinMaxOrders && Drawdown > DrawdownClosingMinMaxOrders) closeAll= true ; ClosseMinMaxOrders() } //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { if (closeAll== true ) { int slipp = MarketInfo( _Symbol , MODE_SPREAD )* 2 ; int minTicket=GetOrderTicket( 0 ); int maxTicket=GetOrderTicket( 1 ); for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderClose(maxTicket, OrderLots(), Bid, slipp)&&OrderClose(minTicket, OrderLots(), Bid, slipp)) Print ( "Максимальный и минимальный ордера на покупку успешно закрыты!" ); else Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ()); } } closeAll= false ; } } //+----------------------------------------------------------------------------+ //| Калькуляция профита максимального и минимального ордера в сетке | //+----------------------------------------------------------------------------+ double CalculiteProfit() { double minProfit = 0 , maxProfit = 0 ; for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) { if (OrderTicket() == GetOrderTicket( 0 )) minProfit = OrderProfit(); if (OrderTicket() == GetOrderTicket( 1 )) maxProfit = OrderProfit(); } } } return (minProfit+maxProfit); } //+----------------------------------------------------------------------------+ //| Номер тикета | //| 0-минимального ордера в сетке | //| 1-максимального ордера в сетке | //+----------------------------------------------------------------------------+ int GetOrderTicket( int tick=- 1 ) { int min_ticket = INT_MAX ; int max_ticket = 0 ; int result=- 1 ; { for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--) { if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { if (OrderTicket() < min_ticket) { min_ticket = OrderTicket(); } if (OrderTicket() > max_ticket) { max_ticket = OrderTicket(); } } } } } } if (tick== 0 ) {result=min_ticket;} else if (tick== 1 ) {result=max_ticket;} else {result=- 1 ;} return (result); } //+----------------------------------------------------------------------------+ EVGENII SHELIPOV 2021.09.26 10:53 #16253 MakarFX # : 나는 당신에게 다른 기능을 주었다 ... 아무것도 추가 할 필요가 없습니다 아니면 옮기셔도 되고... //+----------------------------------------------------------------------------+ //| Закрытие минимального и максимального ордеров | //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ; for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp)); // Print("Максимальный и минимальный ордера на покупку успешно закрыты!"); else Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ()); } if (OrderType() == OP_SELL) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp)); // Print("Максимальный и минимальный ордера на продажу успешно закрыты!"); else Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ()); } } } } } Tretyakov Rostyslav 2021.09.26 11:18 #16254 EVGENII SHELIPOV # : 선택한 항목을 삭제할 수 있습니다. //+----------------------------------------------------------------------------+ //| Закрытие минимального и максимального ордеров | //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ; for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp)); // Print("Максимальный и минимальный ордера на покупку успешно закрыты!"); else Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ()); } if (OrderType() == OP_SELL) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp)); // Print("Максимальный и минимальный ордера на продажу успешно закрыты!"); else Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ()); } } } } } EVGENII SHELIPOV 2021.09.26 11:33 #16255 MakarFX # : 선택한 항목을 삭제할 수 있습니다. Makar 당신은 이유를 설명할 수 있습니다 Tretyakov Rostyslav 2021.09.26 11:39 #16256 EVGENII SHELIPOV # : Makar 이유를 설명할 수 있습니까? "슬립" 크기를 사용하면 모든 방향의 주문을 삭제할 수 있습니다... 가장 중요한 것은 티켓이 일치한다는 것입니다 EVGENII SHELIPOV 2021.09.26 12:06 #16257 MakarFX # : 선택한 항목을 삭제할 수 있습니다. Makar 한 가지 더 질문, 나는 당신을 위해 사진을 버릴 것이지만, 당신은 아무것도 다시 쓸 필요가 없습니다. 당신의 경험은 당신에게 관심이 있습니다. 최소 최대 주문이 마감되고 주문 그리드에 아직 주문이 있는 경우 상황은 다음과 같습니다. 이전 평균 가격이 올바르지 않습니다. 새로운 최대 주문이 열리면 주문 수정이 발생합니다. if (CountTrade() < MaxOrders) { int order_type = FindLastOrderType(); if (order_type == OP_BUY) { price = FindLastOrderPrice(OP_BUY); if (Ask<= price - Step()* Point ) { lastlot = NormalizeDouble (GetMinLotOrder()* MathPow ( MultiplierParameter, OrdersTotal ()), 2 ); ticket = OrderSend ( Symbol (), OP_BUY, lastlot, Ask, slip, 0 , 0 , "Групповой ордер" , Magic, 0 , Blue); if (ticket < 1 ) Print ( "Ошибка ордера на покупку" ); ModifyOrders(OP_BUY); } } if (order_type == OP_SELL) { price = FindLastOrderPrice(OP_SELL); if (Bid>= price + Step()* Point ) { lastlot = NormalizeDouble (GetMinLotOrder()* MathPow ( MultiplierParameter, OrdersTotal ()), 2 ); ticket = OrderSend ( Symbol (), OP_SELL, lastlot, Bid, slip, 0 , 0 , "Групповой ордер" , Magic, 0 , Red); if (ticket < 1 ) Print ( "Ошибка ордера на продажу!" ); ModifyOrders(OP_SELL); } 가격이 이전 평균 가격으로 이동하고 주문 그리드가 닫히면 손실이 발생합니다. 수정을 한 곳 더 나사로 조여야 했습니다.//+----------------------------------------------------------------------------+ //| Закрытие минимального и максимального ордеров | //+----------------------------------------------------------------------------+ void ClosseMinMaxOrders() { int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ; for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) { if (OrderType() == OP_BUY) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp)); // Print("Максимальный и минимальный ордера на покупку успешно закрыты!"); else Print ( "Не удалось закрыть максимальный и минимальный ордера на покупку!" , GetLastError ()); ModifyOrders(OP_BUY); } if (OrderType() == OP_SELL) { if (CalculiteProfit() > 0 && Drawdown > DrawdownClosingMinMaxOrders) (OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) && OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp)); // Print("Максимальный и минимальный ордера на продажу успешно закрыты!"); else Print ( "Не удалось закрыть максимальный и минимальный ордера на продажу!" , GetLastError ()); ModifyOrders(OP_SELL); } } } } } 수정 기능 자체는 다음과 같습니다. //+----------------------------------------------------------------------------+ //| Модификация групповых ордеров | //+----------------------------------------------------------------------------+ void ModifyOrders( int otype) { double avg_price, order_lots = 0 ; price = 0 ; for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == otype) { price += OrderOpenPrice() * OrderLots(); order_lots += OrderLots() ; } } } avg_price = NormalizeDouble (price / order_lots, Digits ); { ObjectDelete ( 0 , "AveragePriceLine" ); ObjectCreate ( 0 , "AveragePriceLine" , OBJ_HLINE , 0 , 0 , avg_price); ObjectSet( "AveragePriceLine" , OBJPROP_COLOR , Magenta); } if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder* Point , Digits ); if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder* Point , Digits ); for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--) { if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == otype) { if (OrderModify(OrderTicket(), OrderOpenPrice(), 0 , tp, 0 )) Print ( "Ордера успешно модифицированы!" ); else Print ( "Ошибка модификации ордеров!" ); } } } } 문제는 로그의 오류가 얼마나 중요한지입니다. EVGENII SHELIPOV 2021.09.26 12:09 #16258 MakarFX # : "슬립" 크기를 사용하면 모든 방향의 주문을 삭제할 수 있습니다... 가장 중요한 것은 티켓이 일치한다는 것입니다 Ask or Bid 가격은 중요하지 않습니다. Tretyakov Rostyslav 2021.09.26 12:25 #16259 EVGENII SHELIPOV # : Ask or Bid 가격은 중요하지 않습니다. 상관없어 Tretyakov Rostyslav 2021.09.26 12:27 #16260 EVGENII SHELIPOV # : 문제는 로그의 오류가 얼마나 중요한지입니다. 비판적이지는 않지만 모든 것에 대한 설명이 있습니다 ... 1...161916201621162216231624162516261627162816291630163116321633...1953 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
아무것도 바뀌지 않았다
모든 것을 바꿔라...
아무것도 바뀌지 않았다
그 쯤...
나는 당신에게 다른 기능을 주었다 ... 아무것도 추가 할 필요가 없습니다
아니면 옮기셔도 되고...
선택한 항목을 삭제할 수 있습니다.
선택한 항목을 삭제할 수 있습니다.
Makar 당신은 이유를 설명할 수 있습니다
Makar 이유를 설명할 수 있습니까?
선택한 항목을 삭제할 수 있습니다.
Makar 한 가지 더 질문, 나는 당신을 위해 사진을 버릴 것이지만, 당신은 아무것도 다시 쓸 필요가 없습니다. 당신의 경험은 당신에게 관심이 있습니다.
최소 최대 주문이 마감되고 주문 그리드에 아직 주문이 있는 경우 상황은 다음과 같습니다. 이전 평균 가격이 올바르지 않습니다. 새로운 최대 주문이 열리면 주문 수정이 발생합니다.
가격이 이전 평균 가격으로 이동하고 주문 그리드가 닫히면 손실이 발생합니다. 수정을 한 곳 더 나사로 조여야 했습니다.
수정 기능 자체는 다음과 같습니다.
문제는 로그의 오류가 얼마나 중요한지입니다.
"슬립" 크기를 사용하면 모든 방향의 주문을 삭제할 수 있습니다... 가장 중요한 것은 티켓이 일치한다는 것입니다
Ask or Bid 가격은 중요하지 않습니다.
Ask or Bid 가격은 중요하지 않습니다.
상관없어
문제는 로그의 오류가 얼마나 중요한지입니다.
비판적이지는 않지만 모든 것에 대한 설명이 있습니다 ...