提案交易--它是骗局还是好事? - 页 9 12345678910111213141516...18 新评论 [删除] 2019.07.14 17:20 #81 prostotrader: 顺便问一下,你打算如何解释这175卢布? 如果正好是提前3个月涨价,到期后出场,那么应该扣除350卢布。 因为只有在股票出现变动(买入/卖出)时才会考虑到存托费用。 而如果由于某种原因你在当月离开(或进入到期月),那么你只需要扣除175卢布。 EA将如何理解要扣除多少钱? 添加 然后,对于一对(期货股票),它可能是一个巨大的数额,而对于1000对 - mizzero。 这完全取决于交易情况的频率。我同意,对于一个大型仓库来说,175p不会发挥很大的作用。但并不是每个人都有一个大的库房。 只是现在这个委员会也要考虑到了。 prostotrader 2019.07.14 17:21 #82 Alexey Kozitsyn: 这完全取决于交易情况出现的频率。我同意,175便士对一个大型仓库来说不会有太大的影响。但并不是每个人都有一个大的库房。 现在我们只需要把这个委员会考虑进去。 很明显,必须考虑到这一点,但如何考虑? [删除] 2019.07.14 17:26 #83 prostotrader: 考虑到这一点是可以理解的,但如何考虑到这一点呢? 也许在进入的时候,175便士一次。暗示资金不会长期闲置,要再次进入退出的月份。 prostotrader 2019.07.14 17:30 #84 Alexey Kozitsyn: 也许在进入的时候,175便士一次。暗示资金不会长期闲置,要再次进入退出的月份。 有道理,但这样一来,你如何说明好处呢? 也就是说,我们需要知道离到期日还有多少天,将买入多少份合同。 即计算出1对的条目百分比 添加 目前,我已决定采取以下措施。 deponalog:= Settings.DepoNalog/(Settings.MaxFut * ExpData.FutData.Lot); Settings.DepoNalog - 175 руб. Settings.MaxFut - Предполагаемое кол-во фьючерсов продажи (на скрине 100) ExpData.FutData.Lot - кол-во акций во фьючерсе [删除] 2019.07.14 18:06 #85 prostotrader: 有道理,但这样一来,你如何说明好处呢? 也就是说,你需要知道离到期日还有多少天,以及将买入多少份合同。 因为%的条目是为1对计算的 添加 目前,我已经决定这样做。 还有一个变体。只要把储户的佣金作为一个输入参数。如果同时会有几个仓位,要计算第一个仓位的盈利能力与佣金,而本月的第二个和后续仓位--不考虑佣金。 [删除] 2019.07.14 18:09 #86 prostotrader:有道理,但这样一来,你如何说明好处呢?也就是说,你需要知道离到期日还有多少天,以及将买入多少份合同。因为%的条目是按1对计算的。 是的,你需要知道合同的数量和175平均 除以这个值。同样是为了防止在本月早些时候没有考虑到佣金。 prostotrader 2019.07.14 18:26 #87 情况是这样的 //+------------------------------------------------------------------+ //| SPOTvsFUT.mq5 | //| Copyright 2019, prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, prostotrader" #property link "https://www.mql5.com" #property version "1.00" #property indicator_separate_window #property indicator_buffers 2 #property indicator_plots 2 //--- plot Label1 #property indicator_label1 "Input %" #property indicator_type1 DRAW_LINE #property indicator_color1 clrLime #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot Label2 #property indicator_label2 "Output %" #property indicator_type2 DRAW_LINE #property indicator_color2 clrAqua #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- #define on_call -111 #define YEAR 365 //--- input double StCB = 7.5; //Ставка ЦБ(%) input double BBSpot = 0.025; //Брокер и Биржа СПОТ(%) input double BrFut = 0.24; //Брокер ФОРТС(руб.) input double BiFut = 0.0066; //Биржа ФОРТС(%) input double BrExp = 1.0; //Брокер за эксп.(руб.) input double BiExp = 2.0; //Биржа за зксп.(руб.) input double Div = 0; //Дивиденты(руб./акция) input double NalogDiv = 13; //Налог на дивиденты(%) input double NalDepo = 175; //Комиссия депозитария (руб./мес.) input long NFut = 100; //Передп. кол-во фьючерсов к продаже input int aBars = 40; //Мин. Баров на графике //--- struct MARKET_DATA { int exp_day; double spot_ask; double spot_bid; double fut_ask; double fut_bid; double fut_lot; double go_sell; double go_buy; }; //--- string spot_symbol; int event_cnt; MARKET_DATA ma_data; double inBuff[], outBuff[]; bool spot_book, fut_book; //+------------------------------------------------------------------+ //| Custom indicator Get Spot name function | //+------------------------------------------------------------------+ string GetSpot(const string fut_name) { string Spot = ""; if(fut_name != "") { int str_tire = StringFind(fut_name, "-"); if(str_tire > 0) { Spot = StringSubstr(fut_name, 0, str_tire); if(Spot == "GAZR") Spot = "GAZP"; else if(Spot == "SBRF") Spot = "SBER"; else if(Spot == "SBPR") Spot = "SBERP"; else if(Spot == "TRNF") Spot = "TRNFP"; else if(Spot == "NOTK") Spot = "NVTK"; else if(Spot == "MTSI") Spot = "MTSS"; else if(Spot == "GMKR") Spot = "GMKN"; else if(Spot == "SNGR") Spot = "SNGS"; else if(Spot == "Eu") Spot = "EURRUB_TOD"; else if(Spot == "Si") Spot = "USDRUB_TOD"; else if(Spot == "SNGP") Spot = "SNGSP"; } } return(Spot); } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { int t_bars = Bars(Symbol(), PERIOD_CURRENT); if(t_bars < (aBars + 2)) { Alert("Не хватает баров на графике!"); return(INIT_FAILED); } event_cnt = 0; //--- spot_symbol = GetSpot(Symbol()); if(spot_symbol == "") { Alert("Не получено имя СПОТа!"); return(INIT_FAILED); } else { if(SymbolSelect(spot_symbol, true) == false) { Alert("Нет смвола с именем " + spot_symbol + "!"); return(INIT_FAILED); } else { spot_book = MarketBookAdd(spot_symbol); if(spot_book == false) { Alert("Не добавлен стакан СПОТа!"); return(INIT_FAILED); } } } fut_book = MarketBookAdd(Symbol()); if(spot_book == false) { Alert("Не добавлен стакан фьючерса!"); return(INIT_FAILED); } IndicatorSetInteger(INDICATOR_DIGITS, 2); IndicatorSetString(INDICATOR_SHORTNAME, "SPOTvsFUT"); //--- SetIndexBuffer(0, inBuff, INDICATOR_DATA); PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE); ArraySetAsSeries(inBuff, true); SetIndexBuffer(1, outBuff, INDICATOR_DATA); PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, EMPTY_VALUE); ArraySetAsSeries(outBuff, true); int window=ChartWindowFind(ChartID(),"SPOTvsFUT"); ObjectCreate(ChartID(),"SPOTvsFUT_1",OBJ_LABEL,window,0,0); ObjectSetInteger(ChartID(),"SPOTvsFUT_1",OBJPROP_YDISTANCE,15); ObjectSetInteger(ChartID(),"SPOTvsFUT_1",OBJPROP_XDISTANCE,5); ObjectSetInteger(ChartID(),"SPOTvsFUT_1",OBJPROP_COLOR,clrLime); ObjectSetString(ChartID(),"SPOTvsFUT_1",OBJPROP_TEXT,"Input: 0"); ObjectCreate(ChartID(),"SPOTvsFUT_2",OBJ_LABEL,window,0,0); ObjectSetInteger(ChartID(),"SPOTvsFUT_2",OBJPROP_YDISTANCE,30); ObjectSetInteger(ChartID(),"SPOTvsFUT_2",OBJPROP_XDISTANCE,5); ObjectSetInteger(ChartID(),"SPOTvsFUT_2",OBJPROP_COLOR,clrAqua); ObjectSetString(ChartID(),"SPOTvsFUT_2",OBJPROP_TEXT,"Output: 0"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ // Custom indicator DeInit function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectDelete(ChartID(),"SPOTvsFUT_1"); ObjectDelete(ChartID(),"SPOTvsFUT_2"); if(fut_book == true) MarketBookRelease(Symbol()); if(spot_book == true) MarketBookRelease(spot_symbol); if(reason == REASON_INITFAILED) { Print("Индикатор удалён! Причина - ошибка инициализации."); string short_name = ChartIndicatorName(ChartID(), 1, 0); ChartIndicatorDelete(ChartID(), 1, short_name); } } //+------------------------------------------------------------------+ //| Custom indicator Get expiration function | //+------------------------------------------------------------------+ int GetExpiration(const string aSymbol) { MqlDateTime ExpData, CurData; datetime expir_time = datetime(SymbolInfoInteger(aSymbol, SYMBOL_EXPIRATION_TIME)); TimeToStruct(expir_time, ExpData); TimeTradeServer(CurData); if(ExpData.year != CurData.year) { return(YEAR * (ExpData.year - CurData.year) - CurData.day_of_year + ExpData.day_of_year); } else { return(ExpData.day_of_year - CurData.day_of_year); } } //+------------------------------------------------------------------+ // Custom indicator On book event function | //+------------------------------------------------------------------+ void OnBookEvent(const string& symbol) { if((symbol == Symbol()) || (symbol == spot_symbol)) { ma_data.exp_day = GetExpiration(Symbol()); ma_data.fut_ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK); ma_data.fut_bid = SymbolInfoDouble(Symbol(), SYMBOL_BID); ma_data.fut_lot = SymbolInfoDouble(Symbol(), SYMBOL_TRADE_CONTRACT_SIZE); ma_data.go_sell = SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_INITIAL); ma_data.go_buy = SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_MAINTENANCE); ma_data.spot_ask = SymbolInfoDouble(spot_symbol, SYMBOL_ASK); ma_data.spot_bid = SymbolInfoDouble(spot_symbol, SYMBOL_BID); //--- double price[]; OnCalculate(event_cnt, event_cnt, on_call, price); } } //+------------------------------------------------------------------+ // Custom indicator Calc In Value function | //+------------------------------------------------------------------+ double CalcInValue() { double depocomiss = NalDepo/(NFut * ma_data.fut_lot); double comiss = ma_data.spot_ask * ma_data.fut_lot * BBSpot/100 * 2 + BrFut + BiFut * ma_data.fut_bid/100 + BrExp + BiExp; double divNalog = Div/100 * 13; double divWaite = 0; if(Div > 0) divWaite = ((Div - divNalog) * ma_data.fut_lot * 13/100/365 * 20); //--- TODO --- return(0); } //+------------------------------------------------------------------+ // Custom indicator Calc Out Value function | //+------------------------------------------------------------------+ double CalcOutValue() { double comiss = ma_data.spot_bid * ma_data.fut_lot * BBSpot/100 + BrFut + BiFut * ma_data.fut_ask/100; //--- TODO --- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { if(prev_calculated == 0) { ArrayInitialize(inBuff, EMPTY_VALUE); ArrayInitialize(outBuff, EMPTY_VALUE); } //--- if(begin == on_call) { for(int i = aBars - 1; i > 0; i--) { inBuff[i] = inBuff[i - 1]; outBuff[i] = outBuff[i - 1]; } inBuff[0] = CalcInValue(); outBuff[0] = CalcOutValue(); } else { inBuff[0] = inBuff[1]; outBuff[0] = outBuff[1]; } inBuff[aBars] = EMPTY_VALUE; outBuff[aBars] = EMPTY_VALUE; ObjectSetString(ChartID(),"SPOTvsFUT_1",OBJPROP_TEXT,"Input: " + DoubleToString(inBuff[0], 2)); ObjectSetString(ChartID(),"SPOTvsFUT_2",OBJPROP_TEXT,"Output: " + DoubleToString(outBuff[0], 2)); ChartRedraw(ChartID()); //--- return value of prev_calculated for next call event_cnt = rates_total; return(rates_total); } //+------------------------------------------------------------------+ [删除] 2019.07.14 18:36 #88 prostotrader: 情况是这样的 我认为,为了完整、全面地研究套利主题,我们需要在两个视图中进行显示:如你所+加一毫秒的信息更新差异,以及在烛台视图中,以评估盈利的整体情况。 大约是这样的(石油的日历)。 prostotrader 2019.07.14 18:39 #89 Alexey Kozitsyn: 我认为,为了完整、全面地研究套利,我们应该显示两种观点:像你的观点+增加信息更新的毫秒之差,以及用蜡烛图来评估盈利能力的全貌。 两只眼镜的工作速度非常快,即使是在非流动性的期货上,SPOTs也会以极快的速度 "甩动"。 if((symbol == Symbol()) || (symbol == spot_symbol)) 添加 "Div hunter "策略的要点是,我们无风险地购买股票和出售期货。 如果我们抓住了一个红利,我们就会得到红利和我们进入的百分比。 市场早已尘埃落定,在中央银行7.5%的年利率下,你不可能得到10-15%的收益。 [删除] 2019.07.14 18:43 #90 prostotrader: 两只眼镜的工作速度非常快,即使在低流动性的期货中,SPOTs也在以极大的速度 "甩动"。 我们需要了解进入是否会被允许以好的价格进入,这就是为什么我们需要ms(我相信)。另外,如果能实时看到杯子的密度就更好了(用于长距离的期货)。 12345678910111213141516...18 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
顺便问一下,你打算如何解释这175卢布?
如果正好是提前3个月涨价,到期后出场,那么应该扣除350卢布。
因为只有在股票出现变动(买入/卖出)时才会考虑到存托费用。
而如果由于某种原因你在当月离开(或进入到期月),那么你只需要扣除175卢布。
EA将如何理解要扣除多少钱?
添加
然后,对于一对(期货股票),它可能是一个巨大的数额,而对于1000对 - mizzero。
这完全取决于交易情况的频率。我同意,对于一个大型仓库来说,175p不会发挥很大的作用。但并不是每个人都有一个大的库房。
只是现在这个委员会也要考虑到了。
这完全取决于交易情况出现的频率。我同意,175便士对一个大型仓库来说不会有太大的影响。但并不是每个人都有一个大的库房。
现在我们只需要把这个委员会考虑进去。
很明显,必须考虑到这一点,但如何考虑?
考虑到这一点是可以理解的,但如何考虑到这一点呢?
也许在进入的时候,175便士一次。暗示资金不会长期闲置,要再次进入退出的月份。
也许在进入的时候,175便士一次。暗示资金不会长期闲置,要再次进入退出的月份。
有道理,但这样一来,你如何说明好处呢?
也就是说,我们需要知道离到期日还有多少天,将买入多少份合同。
即计算出1对的条目百分比
添加
目前,我已决定采取以下措施。
有道理,但这样一来,你如何说明好处呢?
也就是说,你需要知道离到期日还有多少天,以及将买入多少份合同。
因为%的条目是为1对计算的
添加
目前,我已经决定这样做。
还有一个变体。只要把储户的佣金作为一个输入参数。如果同时会有几个仓位,要计算第一个仓位的盈利能力与佣金,而本月的第二个和后续仓位--不考虑佣金。
有道理,但这样一来,你如何说明好处呢?
也就是说,你需要知道离到期日还有多少天,以及将买入多少份合同。
因为%的条目是按1对计算的。
是的,你需要知道合同的数量和175平均 除以这个值。同样是为了防止在本月早些时候没有考虑到佣金。
情况是这样的
情况是这样的
我认为,为了完整、全面地研究套利主题,我们需要在两个视图中进行显示:如你所+加一毫秒的信息更新差异,以及在烛台视图中,以评估盈利的整体情况。
大约是这样的(石油的日历)。
我认为,为了完整、全面地研究套利,我们应该显示两种观点:像你的观点+增加信息更新的毫秒之差,以及用蜡烛图来评估盈利能力的全貌。
两只眼镜的工作速度非常快,即使是在非流动性的期货上,SPOTs也会以极快的速度 "甩动"。
添加
"Div hunter "策略的要点是,我们无风险地购买股票和出售期货。
如果我们抓住了一个红利,我们就会得到红利和我们进入的百分比。
市场早已尘埃落定,在中央银行7.5%的年利率下,你不可能得到10-15%的收益。
两只眼镜的工作速度非常快,即使在低流动性的期货中,SPOTs也在以极大的速度 "甩动"。
我们需要了解进入是否会被允许以好的价格进入,这就是为什么我们需要ms(我相信)。另外,如果能实时看到杯子的密度就更好了(用于长距离的期货)。