거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Twitter에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
당사 팬 페이지에 가입하십시오
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
- 조회수:
- 41
- 평가:
- 게시됨:
-
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동
price_open - 거래 개시 가격;
가격_스톱로스 - 스톱로스 레벨의 가격;
위험_퍼센트_지분 - 예탁금의 퍼센트 단위로 거래당 위험;
double GetVolByRisk(double price_open, double price_stoploss, double risk_percent_equity) { double volume = {}; double margin_risk = AccountInfoDouble(ACCOUNT_EQUITY) * risk_percent_equity / 100; double tick_size = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE); double tick_value = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE); double min_lot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN); double max_lot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX); double lot_step = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP); double delta_stoploss = MathAbs(price_open - price_stoploss); double margin_risk_1lot = delta_stoploss / tick_size * tick_value; volume = margin_risk / margin_risk_1lot; volume = MathFloor(volume / lot_step) * min_lot; if(volume == 0) volume = min_lot; if(volume > max_lot) volume = max_lot; return volume; }
이 함수에 의해 무작위로 거래하는 전문가 어드바이저의 예시
input int stoploss_points = 100;//손절매(핍 단위) input double risk_percent_equity = 1;//예치금의 백분율로 표시되는 위험 //+------------------------------------------------------------------+ ENUM_ORDER_TYPE order_type = ORDER_TYPE_BUY; double equity_open = {}; double profit_expected = {}; bool pos_open = false; //+------------------------------------------------------------------+ void OnTick() { if(!pos_open) { MqlTradeRequest request; MqlTradeCheckResult result_check; MqlTradeResult result_trade; ZeroMemory(request); ZeroMemory(result_check); ZeroMemory(result_trade); double tick_size = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE); if(order_type == ORDER_TYPE_BUY) order_type = ORDER_TYPE_SELL; else order_type = ORDER_TYPE_BUY; if(order_type == ORDER_TYPE_BUY) { request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK); request.type = ORDER_TYPE_BUY; request.sl = request.price - tick_size * stoploss_points; request.tp = request.price + tick_size * stoploss_points; } else { request.price = SymbolInfoDouble(Symbol(), SYMBOL_BID); request.type = ORDER_TYPE_SELL; request.sl = request.price + tick_size * stoploss_points; request.tp = request.price - tick_size * stoploss_points; } double volume = GetVolByRisk(request.price, request.sl, risk_percent_equity); request.action = TRADE_ACTION_DEAL; request.symbol = Symbol(); request.volume = volume; request.deviation = 5; profit_expected = AccountInfoDouble(ACCOUNT_EQUITY) * risk_percent_equity / 100; equity_open = AccountInfoDouble(ACCOUNT_EQUITY); if(OrderCheck(request, result_check)) { OrderSend(request, result_trade); pos_open = true; } } } //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { if(trans.type == TRADE_TRANSACTION_DEAL_ADD) { HistoryDealSelect(trans.deal); ENUM_DEAL_ENTRY deal_entry = (ENUM_DEAL_ENTRY)HistoryDealGetInteger(trans.deal, DEAL_ENTRY); if(deal_entry == DEAL_ENTRY_OUT) { Print("=========="); Print("volume= ", trans.volume); Print("equity_open= ", equity_open); Print("equity_close= ", AccountInfoDouble(ACCOUNT_EQUITY)); Print("profit expected= +/- ", profit_expected); Print("profit real= ", HistoryDealGetDouble(trans.deal, DEAL_PROFIT)); Print("=========="); pos_open = false; } } } //+------------------------------------------------------------------+ double GetVolByRisk(double price_open, double price_stoploss, double risk_percent_equity) { double volume = {}; double margin_risk = AccountInfoDouble(ACCOUNT_EQUITY) * risk_percent_equity / 100; double tick_size = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_SIZE); double tick_value = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE); double min_lot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN); double max_lot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX); double lot_step = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP); double delta_stoploss = MathAbs(price_open - price_stoploss); double margin_risk_1lot = delta_stoploss / tick_size * tick_value; volume = margin_risk / margin_risk_1lot; volume = MathFloor(volume / lot_step) * min_lot; if(volume == 0) volume = min_lot; if(volume > max_lot) volume = max_lot; return volume; } //+------------------------------------------------------------------+
MetaQuotes Ltd에서 러시아어로 번역함.
원본 코드: https://www.mql5.com/ru/code/48222
ATR Cycles
빠른 ATR, 중간 ATR, 느린 ATR의 3가지 ATR을 기반으로 하는 변동성 필터입니다.
샘플러
i_Sampler 표시기는 이상적인 입력을 계산하며, 신경망 학습을 위해 설계되었습니다.
Professional Close All Positions Panel
Professional panel for closing positions with 6 smart filters. Close all, by type, by symbol, or by profit/loss. Real-time P&L display. Perfect for emergency exits and risk management. Includes safety confirmations.
sSortTest
다양한 배열 정렬 방법의 성능 비교.