/// <summary> /// Creates a new instance of <see cref="InlineRename"/>. Any existing instance in progress /// is automatically canceled. /// </summary> /// <param name="control">The <see cref="ScintillaControl"/> object.</param> /// <param name="original">The original name of the target.</param> /// <param name="position">Word end position of the target.</param> /// <param name="includeComments">Whether to initially include comments in search. Pass <code>null</code> to disable this option.</param> /// <param name="includeStrings">Whether to initially include strings in search. Pass <code>null</code> to disable this option.</param> /// <param name="previewChanges">Whether to initially preview changes during renaming. Pass <code>null</code> to disable this option.</param> /// <param name="previewTarget">An <see cref="ASResult"/> object specifying the target. This parameter must not be <code>null</code> if <code>previewChanges</code> is not <code>null</code>.</param> public InlineRename(ScintillaControl control, string original, int position, bool?includeComments, bool?includeStrings, bool?previewChanges, ASResult previewTarget) { if (previewChanges.HasValue && previewTarget == null) { throw new ArgumentNullException("previewTarget"); } CancelCurrent(); sci = control; start = position - original.Length; oldName = original; newName = original; //prevName = original; end = position; currentDoc = PluginBase.MainForm.CurrentDocument; delayedExecution = new DelayedExecution(); history = new List <string>() { oldName }; historyIndex = 0; this.includeComments = includeComments ?? false; this.includeStrings = includeStrings ?? false; this.previewChanges = previewChanges ?? false; sci.BeginUndoAction(); InitializeHighlights(); SetupLivePreview(includeComments.HasValue, includeStrings.HasValue, previewChanges.HasValue, previewTarget); AddMessageFilter(); DisableControls(); Highlight(start, end - start); sci.SetSel(start, end); }
protected void QueueFilterValues() { if (queueGroupKey == null) { // Queueing deactivated. Fire event immediately FilterValues(); return; } // This is a no-op, if the given queueGroupKey is already considered pending in the ThreadPool: DelayedExecution.Queue(queueGroupKey); }
public MainCollectionView() { this.operations = new MainCollectionViewOperations(this); this.releaseFilter = new ReleaseFilter(); this.releaseToSelect = new SelectionInfo(SelectionInfoType.None); InitializeComponent(); this.collectionStatistics.Init(this); this.ResetFilter(); this.delayedExecution = new DelayedExecution(() => { this.Dispatcher.Invoke(new Action(() => { this.ReloadReleases(); })); }, TimeSpan.FromMilliseconds(300)); this.UpdateSelectedRelease(); this.groupFilter.Visibility = Visibility.Collapsed; }
public MainCollectionView() { this.operations = new MainCollectionViewOperations(this); this.releaseFilter = new ReleaseFilter(); this.releaseToSelect = new SelectionInfo(SelectionInfoType.None); InitializeComponent(); this.collectionStatistics.Init(this); this.ResetFilter(); this.delayedExecution = new DelayedExecution(() => { this.Dispatcher.Invoke(new Action(() => { this.ReloadReleases(); })); }, TimeSpan.FromMilliseconds(300)); this.UpdateSelectedRelease(); this.groupFilter.Visibility = Visibility.Collapsed; }
private void handleEvent(Instrument instrument, Tick tick) { if (tick.DateTime.Date.DayOfYear == DateTime.Parse(EndOfContractDate).Date.DayOfYear&& tick.DateTime.TimeOfDay > TimeSpan.Parse("15:50:00")) { #region End of contract if (HasPosition(instrument) && Position.Side == PositionSide.Long && inPosition && currentLot > 0) { inPosition = false; prevTimeForExceution = lastTickTime; lastExecutionTime = prevTimeForExceution.AddMilliseconds(Delay); DelayedExecution order = new DelayedExecution(); order.OrderType = -1; order.ExecutionTime = lastExecutionTime; order.Lots = currentLot; delayedExecutions.Insert(index, order); index++; tradeNumber++; Console.WriteLine("exit end: " + currentLot); Sell(instrument, currentLot, "ExitLongFuture-End #"); martin = Step; } if (HasPosition(instrument) && Position.Side == PositionSide.Short && inPosition && currentLot < 0) { inPosition = false; prevTimeForExceution = lastTickTime; lastExecutionTime = prevTimeForExceution.AddMilliseconds(Delay); DelayedExecution order = new DelayedExecution(); order.OrderType = -2; order.ExecutionTime = lastExecutionTime; order.Lots = currentLot * (-1); delayedExecutions.Insert(index, order); index++; tradeNumber++; int d = currentLot * (-1); Console.WriteLine("exit : " + d); Buy(instrument, d, "ExitShortFuture-End #"); martin = Step; } return; #endregion } else { if (!ok) { ok = true; last = tick.DateTime; last = last.AddSeconds(1); lastTickTime = tick.DateTime; } if (ok && (tick.DateTime.TimeOfDay < startBreak || tick.DateTime.TimeOfDay > endBreak)) { #region Avoid weekend //---------------avoid weekend----------------- if ((tick.DateTime.DayOfWeek == DayOfWeek.Saturday) || (tick.DateTime.DayOfWeek == DayOfWeek.Friday && tick.DateTime.TimeOfDay > endBreak) || (tick.DateTime.DayOfWeek == DayOfWeek.Sunday && tick.DateTime.TimeOfDay < startBreak)) { return; } #endregion if (tick.DateTime != lastTickTime && ready) { //---------------handle tick event----------------- decimal f = (virtualAsk + virtualBid) / 2; f = Math.Ceiling(f); MA.Add(f); MAaverage += (f); tickCounter++; #region Print Each Tick Data if (PrintEachTickData == 1) { using (TextWriter text = File.AppendText(@"C:\Users\U-1001\Desktop\Spread MA Graph\" + instrument.Symbol + " Each Tick.txt")) { text.WriteLine(lastTickTime.ToString("yyyy-MM-dd HH:mm:ss.fff") + "," + lastCurrentAsk + "," + lastCurrentBid + "," + lastFutureAsk + "," + lastFutureBid); } } #endregion #region MA and deviation calculations if (tickCounter == MAback) { tickReady = true; MAaverage /= MAback; roundMA = Math.Ceiling(MAaverage); if (DateTime.Compare(lastTickTime, last) > 0) { last = lastTickTime; last = last.AddSeconds(DeviationDeltaTime); sumMA = 0; if (firstTime) { for (int j = 0; j < MAback; j++) { MA_Average.Add(MA[j] - MAaverage); } firstTime = false; } else { for (int j = 0; j < MAback; j++) { MA_Average[j] = MA[j] - MAaverage; } } for (int j = 0; j < MAback; j++) { MA_Average[j] *= MA_Average[j]; sumMA += MA_Average[j]; } sumMA /= (MAback - 1); deviation = (decimal)Math.Sqrt((double)sumMA); deviation = Math.Ceiling(deviation); //virtualASk, virtualBis, roundMA, (deviation * delta), lastTickTime if (PrintEveryMinute == 1) { using (TextWriter text = File.AppendText(@"C:\Users\U-1001\Desktop\Spread MA Graph\" + instrument.Symbol + " Every minute.txt")) { text.WriteLine(lastTickTime + " " + MAaverage + " " + roundMA + " " + (roundMA + deviation * Delta) + " " + (roundMA - deviation * Delta) + " " + virtualAsk + " " + virtualBid + " " + deviation); } } if (PrintEachRow == 1) { using (TextWriter text = File.AppendText(@"C:\Users\U-1001\Desktop\Spread MA Graph\" + instrument.Symbol + " Each row.txt")) { text.WriteLine(lastTickTime.ToString("yyyy-MM-dd HH:mm:ss.fff") + "," + lastCurrentAsk + "," + lastCurrentBid + "," + lastFutureAsk + "," + lastFutureBid + " " + +virtualAsk + " " + virtualBid + " " + f + " " + MAaverage + " " + roundMA + " " + deviation + " " + (roundMA + deviation * Delta) + " " + (roundMA - deviation * Delta)); } } } } #endregion #region Print Each Row if (tickReady) { if (PrintEachRow == 1) { using (TextWriter text = File.AppendText(@"C:\Users\U-1001\Desktop\Spread MA Graph\" + instrument.Symbol + " Each row.txt")) { text.WriteLine(lastTickTime.ToString("yyyy-MM-dd HH:mm:ss.fff") + "," + lastCurrentAsk + "," + lastCurrentBid + "," + lastFutureAsk + "," + lastFutureBid + " " + +virtualAsk + " " + virtualBid + " " + f + " " + MAaverage + " " + roundMA + " " + deviation + " " + (roundMA + deviation * Delta) + " " + (roundMA - deviation * Delta)); } } } #endregion #region Handle entries and exits if (tickReady) { if (!HasPosition(instrument) && tick.DateTime.Date < DateTime.Parse(EndOfContractDate).Date&& !inPosition && currentLot == 0) { if ((virtualAsk < roundMA - deviation * Delta)) { inPosition = true; prevTimeForExceution = lastTickTime; lastExecutionTime = prevTimeForExceution.AddMilliseconds(Delay); DelayedExecution order = new DelayedExecution(); order.OrderType = 1; order.ExecutionTime = lastExecutionTime; delayedExecutions.Insert(index, order); index++; Buy(instrument, 1, "EnterLongFuture #"); tradeNumber++; } else if ((virtualBid > roundMA + deviation * Delta)) { inPosition = true; prevTimeForExceution = lastTickTime; lastExecutionTime = prevTimeForExceution.AddMilliseconds(Delay); DelayedExecution order = new DelayedExecution(); order.OrderType = 2; order.ExecutionTime = lastExecutionTime; delayedExecutions.Insert(index, order); index++; Sell(instrument, 1, "EnterShortFuture #"); tradeNumber++; } } else if (HasPosition(instrument) && Position.Side == PositionSide.Long && inPosition && currentLot > 0) { decimal buyLevel = roundMA - deviation * (Delta + martin); /*if (virtualAsk < buyLevel && (FromDelta + martin) <= ToDelta) * { * //Console.WriteLine(deviation + " " + (FromDelta + martin)); * inPosition = true; * prevTimeForExceution = lastTickTime; * lastExecutionTime = prevTimeForExceution.AddMilliseconds(Delay); * DelayedExecution order = new DelayedExecution(); * order.OrderType = 1; * order.ExecutionTime = lastExecutionTime; * delayedExecutions.Insert(index, order); * index++; * Buy(instrument, 1, "EnterLongFuture-Martin #"); * tradeNumber++; * martin += Step; * }*/ if (virtualBid > roundMA) { inPosition = false; prevTimeForExceution = lastTickTime; lastExecutionTime = prevTimeForExceution.AddMilliseconds(Delay); DelayedExecution order = new DelayedExecution(); order.OrderType = -1; order.ExecutionTime = lastExecutionTime; order.Lots = currentLot; delayedExecutions.Insert(index, order); index++; tradeNumber++; Sell(instrument, currentLot, "ExitLongFuture #"); martin = Step; } } else if (HasPosition(instrument) && Position.Side == PositionSide.Short && inPosition && currentLot < 0) { decimal sellLevel = roundMA + deviation * (Delta + martin); /*if (virtualBid > sellLevel && (FromDelta + martin) <= ToDelta) * { * //Console.WriteLine(deviation + " " + (FromDelta + martin)); * inPosition = true; * prevTimeForExceution = lastTickTime; * lastExecutionTime = prevTimeForExceution.AddMilliseconds(Delay); * DelayedExecution order = new DelayedExecution(); * order.OrderType = 2; * order.ExecutionTime = lastExecutionTime; * delayedExecutions.Insert(index, order); * index++; * Sell(instrument, 1, "EnterShortFuture-Martin #"); * tradeNumber++; * martin += Step; * }*/ if (virtualAsk < roundMA) { inPosition = false; prevTimeForExceution = lastTickTime; lastExecutionTime = prevTimeForExceution.AddMilliseconds(Delay); DelayedExecution order = new DelayedExecution(); order.OrderType = -2; order.ExecutionTime = lastExecutionTime; order.Lots = currentLot * (-1); delayedExecutions.Insert(index, order); index++; tradeNumber++; int d = currentLot * (-1); Buy(instrument, d, "ExitShortFuture #"); martin = Step; } } } #endregion if (tickReady) { if (tickCounter == MAback) { tickCounter--; MAaverage *= MAback; MAaverage -= MA[0]; MA.RemoveAt(0); } } #region Handle order delay //---------------handle order delay----------------------- using (TextWriter text = File.AppendText(@"\\DTRADE\Public\Strategy Box\Programs\Arbitrage\StratagyPrints\" + instrument.Symbol + "asd.txt")) { for (int i = 0; i < delayedExecutions.Count; i++) { if (tick.DateTime > delayedExecutions[i].ExecutionTime && delayedExecutions[i].Filled == false) { switch (delayedExecutions[i].OrderType) { case 1: case -2: { currentLot += delayedExecutions[i].Lots; text.WriteLine(prevTimeForExceution + ";" + futureInstrument.Symbol + ";Buy;" + lastFutureAsk + ";" + delayedExecutions[i].Lots + ";" + lastFutureAsk + ";LongFuture"); text.WriteLine(prevTimeForExceution + ";" + currentInstrument.Symbol + ";Sell;" + lastCurrentBid + ";" + delayedExecutions[i].Lots + ";" + lastCurrentBid + ";ShortCurrent"); break; } case 2: case -1: { currentLot -= delayedExecutions[i].Lots; text.WriteLine(prevTimeForExceution + ";" + currentInstrument.Symbol + ";Buy;" + lastCurrentAsk + ";" + delayedExecutions[i].Lots + ";" + lastCurrentAsk + ";LongCurrent"); text.WriteLine(prevTimeForExceution + ";" + futureInstrument.Symbol + ";Sell;" + lastFutureBid + ";" + delayedExecutions[i].Lots + ";" + lastFutureBid + ";ShortFuture"); break; } } delayedExecutions[i].Filled = true; } } } #endregion } #region Save last tick values //---------------save last tick values----------------- lastTickTime = tick.DateTime; lastCurrentAsk = Math.Round((decimal)currentInstrument.Ask.Price, 3); lastCurrentBid = Math.Round((decimal)currentInstrument.Bid.Price, 3); lastFutureAsk = Math.Round((decimal)futureInstrument.Ask.Price, 3); lastFutureBid = Math.Round((decimal)futureInstrument.Bid.Price, 3); virtualBid = ((lastFutureBid - lastCurrentAsk) / tickSize); virtualAsk = ((lastFutureAsk - lastCurrentBid) / tickSize); ready = true; #endregion } } }
void addDelayedExecution(float t, DelayedExecution callback) { //callbackMutex.WaitOne(); callbacks.AddLast(new KeyValuePair <float, DelayedExecution>(t, callback)); //callbackMutex.ReleaseMutex(); }
void Awake() { Instance = this; }