private bool CanRebalance() { MT4Ctrl1.GetAccountInfomation(); MT4Ctrl2.GetAccountInfomation(); if (MT4Ctrl1.AccountMargin == 0 && MT4Ctrl2.AccountMargin == 0) { if (MT4Ctrl1.AccountEquity != MT4Ctrl2.AccountEquity) { return(true); } else { return(false); } } double dMarginPercent1 = MT4Ctrl1.AccountEquity / MT4Ctrl1.AccountMargin * 100; double dMarginPercent2 = MT4Ctrl2.AccountEquity / MT4Ctrl2.AccountMargin * 100; if (dMarginPercent1 <= dLowLimitMargin || dMarginPercent2 <= dLowLimitMargin) { return(true); } return(false); }
private void DoCloseOrder() { List <MtOrder> listOrders1 = MT4Ctrl1.listOrders; List <MtOrder> listOrders2 = MT4Ctrl2.listOrders; foreach (MtOrder order1 in listOrders1) { int nTicket1 = 0, nTicket2 = 0; nTicket1 = order1.Ticket; int nMagic = order1.MagicNumber; if (listMagicNumberToClose.IndexOf(nMagic) == -1) { break; } foreach (MtOrder order2 in listOrders1) { if (order2.MagicNumber == nMagic) { nTicket2 = order2.Ticket; break; } } if (nTicket1 != 0 && nTicket2 != 0) { MT4Ctrl1.CloseOrder(nTicket1, nSlippage1); MT4Ctrl2.CloseOrder(nTicket2, nSlippage2); } } }
private void m_timerUpdateQuote_Tick(object sender, EventArgs e) { MT4Ctrl1.GetAccountInfomation(); MT4Ctrl1.GetOpenOrders(); MT4Ctrl2.GetAccountInfomation(); MT4Ctrl2.GetOpenOrders(); UpdatedCurrentQuote(); }
private void TryDisconnect() { RunOnUiThread(() => { m_timerUpdateQuote.Enabled = false; }); MT4Ctrl1.BeginDisconnect(); MT4Ctrl2.BeginDisconnect(); bWorking = false; MT4CurrentState CurrentState = new MT4CurrentState(); WSNode.SendDataToUser("MT4CurrentState", CurrentState); }
private void TryLogin() { if (nPort1 != 0) { MT4Ctrl1.BeginConnect(nPort1); } if (nPort2 != 0) { MT4Ctrl2.BeginConnect(nPort2); } RunOnUiThread(() => { m_timerUpdateQuote.Enabled = true; }); }
private void DoChangeAccount() { if (!MT4Ctrl1.bAvailable || !MT4Ctrl2.bAvailable) { return; } if (!string.IsNullOrEmpty(strlogin1) && !string.IsNullOrEmpty(strPassword1) && !string.IsNullOrEmpty(strMT4Server1)) { MT4Ctrl1.ChangeAccount(strlogin1, strPassword1, strMT4Server1); } if (!string.IsNullOrEmpty(strlogin2) && !string.IsNullOrEmpty(strPassword2) && !string.IsNullOrEmpty(strMT4Server2)) { MT4Ctrl2.ChangeAccount(strlogin2, strPassword2, strMT4Server2); } if (_isUiQuoteUpdateReady) { _isUiQuoteUpdateReady = false; RunOnUiThread(() => { if (MT4Ctrl1.bIsWithSwap) { m_lblSwapState1.ForeColor = Color.Yellow; m_lblSwapState1.Text = "This Account get Swap Mode!"; } else { m_lblSwapState1.ForeColor = Color.Blue; m_lblSwapState1.Text = "This Account don't get Swap Mode!"; } if (MT4Ctrl2.bIsWithSwap) { m_lblSwapState2.ForeColor = Color.Yellow; m_lblSwapState2.Text = "This Account get Swap Mode!"; } else { m_lblSwapState2.ForeColor = Color.Blue; m_lblSwapState2.Text = "This Account don't get Swap Mode!"; } }); _isUiQuoteUpdateReady = true; } }
public void On_Terminal2_QuoteUpdate(MtQuote quote) { if (_isUiQuoteUpdateReady) { _isUiQuoteUpdateReady = false; RunOnUiThread(() => { m_txtSymbol2.Text = MT4Ctrl1.currentQuote.Instrument; m_txtBid2.Text = MT4Ctrl1.currentQuote.Bid.ToString(CultureInfo.CurrentCulture); m_txtAsk2.Text = MT4Ctrl1.currentQuote.Ask.ToString(CultureInfo.CurrentCulture); m_txtExpertHandle2.Text = MT4Ctrl1.currentQuote.ExpertHandle.ToString(); MT4CurrentState CurrentQuoteState = new MT4CurrentState(); CurrentQuoteState.Symbol2 = m_txtSymbol2.Text; CurrentQuoteState.Bid2 = m_txtBid2.Text; CurrentQuoteState.Ask2 = m_txtAsk2.Text; CurrentQuoteState.ExpertHandle2 = m_txtExpertHandle2.Text; WSNode.SendDataToUser("TerminalUpdate2", CurrentQuoteState); }); _isUiQuoteUpdateReady = true; } nCurSpread2 = (int)MT4Ctrl2.GetSymbolSpread(quote.Instrument); if (bWorking) { //nCurSpread2 = (int)(quote.Ask * 100000) - (int)(quote.Bid * 100000); if (nCurSpread1 == nCurSpread2 && nCurSpread1 < nSpreadOpenThreshold) { DoOpenOrder(); } } if (bCloseOrderWorking) { if (nCurSpread1 == nCurSpread2 && nCurSpread1 < nSpreadCloseThreshold) { DoCloseOrder(); } } }
private void DoOpenOrder() { MT4Ctrl1.GetAccountInfomation(); MT4Ctrl2.GetAccountInfomation(); int nAccountLeverage1 = MT4Ctrl1.GetAccountLeverage(); int nAccountLeverage2 = MT4Ctrl2.GetAccountLeverage(); double dSymbolTradeContractSize1 = MT4Ctrl1.GetSymbolTradeContractSize(strCurrentSymbol); double dSymbolTradeContractSize2 = MT4Ctrl2.GetSymbolTradeContractSize(strCurrentSymbol); if (nAccountLeverage1 == 0 || nAccountLeverage2 == 0 || dSymbolTradeContractSize1 == 0 || dSymbolTradeContractSize2 == 0) { return; } double dMarginPerLot1 = dSymbolTradeContractSize1 / (double)nAccountLeverage1 + MT4Ctrl1.dCommissionPerLot; double dMarginPerLot2 = dSymbolTradeContractSize2 / (double)nAccountLeverage2 + MT4Ctrl2.dCommissionPerLot; double dAvailableMarginToOpen1, dAvailableMarginToOpen2; //Get AvailableMarginToOpen of MT4-1 if (MT4Ctrl1.AccountMargin == 0) { dAvailableMarginToOpen1 = MT4Ctrl1.AccountEquity / dMarginTarget * 100; } else { double dMarginPercent1 = MT4Ctrl1.AccountEquity / MT4Ctrl1.AccountMargin * 100; if (dMarginPercent1 <= dMarginTarget) { return; } double dAvailableMarginToOpenPercent1 = dMarginPercent1 - dMarginTarget; dAvailableMarginToOpen1 = MT4Ctrl1.AccountEquity * dAvailableMarginToOpenPercent1; } //Get AvailableMarginToOpen of MT4-2 if (MT4Ctrl2.AccountMargin == 0) { dAvailableMarginToOpen2 = MT4Ctrl2.AccountEquity / dMarginTarget * 100; } else { double dMarginPercent2 = MT4Ctrl2.AccountEquity / MT4Ctrl2.AccountMargin * 100; if (dMarginPercent2 <= dMarginTarget) { return; } double dAvailableMarginToOpenPercent2 = dMarginPercent2 - dMarginTarget; dAvailableMarginToOpen2 = MT4Ctrl1.AccountEquity * dAvailableMarginToOpenPercent2; } double dLotToOpen1 = dAvailableMarginToOpen1 / dMarginPerLot1; double dLotToOpen2 = dAvailableMarginToOpen2 / dMarginPerLot2; double dLotToOpen = 0; if (dLotToOpen1 < dLotToOpen2) { dLotToOpen = dLotToOpen1 / nSplitCnt; } else { dLotToOpen = dLotToOpen2 / nSplitCnt; } dLotToOpen = (double)Math.Round(dLotToOpen * 100f) / 100f; //Open Order if ((MT4Ctrl1.bIsWithSwap && MT4Ctrl2.bIsWithSwap) || (MT4Ctrl1.bIsWithSwap && MT4Ctrl2.bIsWithSwap)) { m_lblState.Text = "Two Account are not Matched!"; return; } if (MT4Ctrl1.bIsWithSwap && !MT4Ctrl2.bIsWithSwap) { if (MT4Ctrl1.dSwapBuy > 0 && MT4Ctrl1.dSwapSell < 0) { for (int i = 0; i < nSplitCnt; i++) { int nMagicCode = DateTime.Now.Millisecond; MT4Ctrl1.OpenOrder(strCurrentSymbol, TradeOperation.OP_BUY, dLotToOpen, nSlippage1, nMagicCode); MT4Ctrl2.OpenOrder(strCurrentSymbol, TradeOperation.OP_SELL, dLotToOpen, nSlippage2, nMagicCode); } } else { for (int i = 0; i < nSplitCnt; i++) { int nMagicCode = DateTime.Now.Millisecond; MT4Ctrl1.OpenOrder(strCurrentSymbol, TradeOperation.OP_SELL, dLotToOpen, nSlippage1, nMagicCode); MT4Ctrl2.OpenOrder(strCurrentSymbol, TradeOperation.OP_BUY, dLotToOpen, nSlippage2, nMagicCode); } } } if (!MT4Ctrl1.bIsWithSwap && MT4Ctrl2.bIsWithSwap) { if (MT4Ctrl2.dSwapBuy > 0 && MT4Ctrl2.dSwapSell < 0) { for (int i = 0; i < nSplitCnt; i++) { int nMagicCode = DateTime.Now.Millisecond; MT4Ctrl1.OpenOrder(strCurrentSymbol, TradeOperation.OP_SELL, dLotToOpen, nSlippage1, nMagicCode); MT4Ctrl2.OpenOrder(strCurrentSymbol, TradeOperation.OP_BUY, dLotToOpen, nSlippage2, nMagicCode); } } else { for (int i = 0; i < nSplitCnt; i++) { int nMagicCode = DateTime.Now.Millisecond; MT4Ctrl1.OpenOrder(strCurrentSymbol, TradeOperation.OP_BUY, dLotToOpen, nSlippage1, nMagicCode); MT4Ctrl2.OpenOrder(strCurrentSymbol, TradeOperation.OP_SELL, dLotToOpen, nSlippage2, nMagicCode); } } } }
private async void TryReBalance() { if (!MT4Ctrl1.bAvailable || !MT4Ctrl2.bAvailable || MT4Ctrl1.bDemoAccount || MT4Ctrl2.bDemoAccount) { return; } MT4Ctrl1.GetAccountInfomation(); MT4Ctrl2.GetAccountInfomation(); double dNewBalance = (MT4Ctrl1.AccountEquity + MT4Ctrl2.AccountEquity) / 2; double dAmount = MT4Ctrl1.AccountEquity - dNewBalance; if (dAmount > 0) { accountFrom = MT4Ctrl1.AccountNumber.ToString(); accountTo = MT4Ctrl2.AccountNumber.ToString(); } else { accountFrom = MT4Ctrl2.AccountNumber.ToString(); accountTo = MT4Ctrl1.AccountNumber.ToString(); } dAmount = Math.Abs(dAmount); dAmount = (double)Math.Round(dAmount * 100f) / 100f; RunOnUiThread(() => { m_lblState.Text = "Rebalancing Now ..."; }); var result = await Execute(() => AccountRebalancer.startRebalance( 10, UAGTRADE_Username, UAGTRADE_Password, accountFrom, accountTo, nWithrawRetryCount, nDepositeRetryCount)); string strState = ""; if (result == 0) { strState = "Rebalancing Success!"; } else if (result == -1) { strState = "Login Failed!"; } else if (result == -2) { strState = "MT4 To Wallet Failed!"; } else if (result == -3) { strState = "Wallet To MT4 Failed!"; } else if (result == -4) { strState = "Error Happend!"; } if (result == -5) { strState = ""; } else { strState += " ( WithrawRetryCount:" + AccountRebalancer.GetWithrawRetryCnt().ToString() + " DepositeRetryCount:" + AccountRebalancer.GetDepositeCnt().ToString() + " DateTime:" + DateTime.Now.ToString() + " Period:" + AccountRebalancer.GetPeriod().ToString() + "s )"; } RunOnUiThread(() => { m_lblState.Text = strState; }); }
private void TrySelectCurrency() { MT4Ctrl1.SetCurrencyPair(strCurrentSymbol); MT4Ctrl2.SetCurrencyPair(strCurrentSymbol); UpdatedCurrentQuote(); }