private void _loop(Extensions.Monitor monitor, Extensions.MonenyManagement moneymanagement, Extensions.Monitor.BreakEvenData breakevendata, Extensions.Monitor.TrailingData trailingdata) { // --> Aggiorno le informazioni necessarie per gestire la strategia //monitor.Update(_checkClosePositions(monitor), breakevendata, trailingdata, null); // --> Condizione condivisa, filtri generali, segnano il perimetro di azione limitando l'ingresso bool sharedCondition = (!monitor.OpenedInThisBar && !monitor.InGAP(GAP) && !monitor.InPause(Server.Time) && monitor.Symbol.RealSpread() <= SpreadToTrigger && monitor.Positions.Length < MaxTrades); // --> Controllo la presenza di trigger d'ingresso tenendo conto i filtri bool triggerBuy = _calculateLongTrigger(_calculateLongFilter(sharedCondition)); bool triggerSell = _calculateShortTrigger(_calculateShortFilter(sharedCondition)); // --> Se ho entrambi i trigger qualcosa non va, lo segnalo nei log e fermo la routin if (triggerBuy && triggerSell) { Print("{0} {1} ERROR : trigger buy and sell !", monitor.Label, monitor.Symbol.Name); return; } // --> Calcolo la size in base al money management stabilito double volumeInUnits = Monitor1.Symbol.QuantityToVolumeInUnits(moneymanagement.GetLotSize()); // --> Se ho il segnale d'ingresso considerando i filtri allora procedo con l'ordine a mercato if (triggerBuy) { ExecuteMarketRangeOrder(TradeType.Buy, monitor.Symbol.Name, volumeInUnits, SLIPPAGE, monitor.Symbol.Ask, monitor.Label, SL, TP); } else if (triggerSell) { ExecuteMarketRangeOrder(TradeType.Sell, monitor.Symbol.Name, volumeInUnits, SLIPPAGE, monitor.Symbol.Bid, monitor.Label, SL, TP); } }
private void _test(TradeType trigger, Extensions.MonenyManagement moneymanagement) { // --> Calcolo la size in base al money management stabilito double volumeInUnits = moneymanagement.Symbol.QuantityToVolumeInUnits(moneymanagement.GetLotSize()); switch (trigger) { case TradeType.Buy: ExecuteMarketRangeOrder(TradeType.Buy, moneymanagement.Symbol.Name, volumeInUnits, SLIPPAGE, moneymanagement.Symbol.Ask, "TEST", SL, TP); break; case TradeType.Sell: ExecuteMarketRangeOrder(TradeType.Sell, moneymanagement.Symbol.Name, volumeInUnits, SLIPPAGE, moneymanagement.Symbol.Bid, "TEST", SL, TP); break; } }