소품 거래 - 사기 또는 어떤 의미가 있습니까? - 페이지 9

 
prostotrader :

그건 그렇고,이 175 루블을 어떻게 고려할 것을 제안합니까?

정확히 3 개월 만에 일어나서 만료되면 350 루블을 공제해야합니다.

주식의 이동(매수/매도)이 있는 경우에만 예치금이 들기 때문입니다.

그리고 어떤 이유로 같은 달에 나온 경우(또는 만료된 달에 들어간 경우) 175루블만 공제하면 됩니다.

어드바이저는 얼마나 빼야 하는지 어떻게 이해할까요?

추가됨

그런 다음 한 쌍(미래 주식)의 경우 엄청난 양이 될 수 있고 1000 쌍의 경우 아주 작은 금액이 될 수 있습니다.

그것은 모두 거래 상황의 발생 빈도에 달려 있습니다. 나는 175r이 큰 창고에서 큰 역할을 하지 않을 것이라는 데 동의합니다. 그러나 모든 사람이 큰 창고를 가지고 있는 것은 아닙니다.

바로 지금이 수수료를 고려해야합니다.

 
Alexey Kozitsyn :

그것은 모두 거래 상황의 발생 빈도에 달려 있습니다. 나는 175r이 큰 창고에서 큰 역할을 하지 않을 것이라는 데 동의합니다. 그러나 모든 사람이 큰 창고를 가지고 있는 것은 아닙니다.

바로 지금이 수수료를 고려해야합니다.

고려해야 할 사항은 분명하지만 어떻게 고려해야합니까?

 
prostotrader :

고려해야 할 사항은 분명하지만 어떻게 고려해야합니까?

아마 175r 진입 당시 한 번. 돈이 오랫동안 유휴 상태가되지 않고 퇴장 한 달 동안 다시 입력해야한다고 가정합니다.

 
Alexey Kozitsyn :

아마 175r 진입 당시 한 번. 돈이 오랫동안 유휴 상태가되지 않고 퇴장 한 달 동안 다시 입력해야한다고 가정합니다.

논리적이지만 이점을 고려하는 방법은 무엇입니까?

즉, 만기까지 며칠이 남았는지, 얼마나 많은 계약을 매수할 것인지 알아야 하고,

항목의 %는 1 쌍에 대해 계산되기 때문에

추가됨

지금까지 나는 이것을 하기로 결정했다:

deponalog:= Settings.DepoNalog/(Settings.MaxFut * ExpData.FutData.Lot);
Settings.DepoNalog - 175 руб.



Settings.MaxFut - Предполагаемое кол-во фьючерсов продажи (на скрине 100)
ExpData.FutData.Lot - кол-во акций во фьючерсе
 
prostotrader :

논리적이지만 이점을 고려하는 방법은 무엇입니까?

즉, 만기까지 며칠이 남았는지, 얼마나 많은 계약을 매수할 것인지 알아야 하고,

항목의 %는 1 쌍에 대해 계산되기 때문에

추가됨

지금까지 나는 이것을 하기로 결정했다:

또 다른 옵션이 있습니다. 예치금의 커미션을 입력 매개변수로 하는 것은 쉽습니다. 동시에 여러 위치가있는 경우 수수료를 고려하여 첫 번째 위치의 수익성을 계산하고 수수료를 고려하지 않고 이번 달의 두 번째 및 후속 위치를 계산하십시오.

 
prostotrader :

논리적이지만 이점을 고려하는 방법은 무엇입니까?

즉, 만기까지 며칠이 남았는지, 얼마나 많은 계약을 매수할 것인지 알아야 하고,

항목의 %는 1 쌍에 대해 계산되기 때문에

예, 계약 수를 알고 이 값으로 175를 균등하게 확장해야 합니다. 이번 달 초에 수수료가 고려되지 않은 경우를 대비하여 다시 한 번 말씀드립니다.

 

어떻게 든 밝혀졌습니다.

 //+------------------------------------------------------------------+
//|                                                    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);
}
//+------------------------------------------------------------------+
 
prostotrader :

어떻게 든 밝혀졌습니다.

차익 거래 주제에 대한 완전하고 포괄적인 연구를 위해서는 디스플레이를 두 가지 유형으로 만들어야 한다고 생각합니다. + 정보 업데이트 간에 밀리초 차이를 추가하고 촛대 형태로 전체 그림을 평가합니다. 수익성.

이와 같은 것(기름에 대한 달력):


 
Alexey Kozitsyn :

차익 거래 주제에 대한 완전하고 포괄적인 연구를 위해서는 디스플레이를 두 가지 유형으로 만들어야 한다고 생각합니다. + 정보 업데이트 간에 밀리초 차이를 추가하고 촛대 형태로 전체 그림을 평가합니다. 수익성.

두 개의 주문서는 유동성이 낮은 선물에도 매우 빠르게 작동하며 SPOT은 빠른 속도로 "타작"합니다.

 if ((symbol == Symbol ()) || (symbol == spot_symbol ))

추가됨

"Div Hunter" 전략의 요점은 위험 부담 없이 주식을 사고 선물을 파는 것입니다.

배당금을 받으면 배당금과 입력 한 비율을 얻습니다.

시장은 오래전부터 자리를 잡았고, 연 7.5%의 중앙은행 금리로 10~15%를 받는 것은 불가능하다.

 
prostotrader :

두 개의 주문서는 유동성이 낮은 선물에도 매우 빠르게 작동하며 SPOT은 빠른 속도로 "타작"합니다.

들어가려면 그들이 우리를 좋은 가격에 들여보내 줄 것인지 이해해야 하고 그런 다음 ms가 필요합니다(제 생각에는). 또한 실시간으로 유리로 밀도를 보는 것이 좋습니다(먼 미래의 경우).