Prop trading - est-ce une arnaque ou est-ce une bonne chose ? - page 7

 
Yuriy Asaulenko:

Il est clair pour tout le monde que l'on ne joue pas avec cent livres).

Contrairement à beaucoup de gens, je ne joue pas, je travaille, ou plutôt je gagne de l'argent :)

Vous avez raison, je vais enlever l'image...

 
Yuriy Asaulenko:

En fait, il n'est pas égal à zéro. Mais un tout petit.)


Je parlais de la stratégie qui est 100% sans risque.

Mais, bien sûr, demain le courtier peut fermer et ne pas rendre l'argent.

Et d'autres surprises peuvent survenir dans le pays...

 
prostotrader:

Contrairement à beaucoup de gens, je ne joue pas, je travaille, ou plutôt je gagne de l'argent :)

A la bourse, ils jouent.)) Seuls les employés à temps plein travaillent sur l'échange). Les athlètes jouent aussi, et ne gagnent pas mal. L'un n'empêche pas l'autre.

 
Yuriy Asaulenko:

La bourse est en jeu.)) Seuls les employés à temps plein travaillent à la bourse). Les athlètes jouent aussi, et gagnent bien leur vie. L'un n'interfère pas avec l'autre).

Dans mon esprit, "jouer" signifie Dormir, ce n'est pas pour moi.

Je préfère dire"travailler en tant que trader".

 
prostotrader:

Dans mon esprit, "jouer" signifie SLITTER, ce n'est pas pour moi.

Je préfère dire"travailler en tant que trader".

Le travail d'un trader consiste à jouer sur le marché boursier).

Pardonnez-moi, mais c'est de la terminologie. Vous ne pouvez pas vous en tirer comme ça).

 

Pourdiman1982

Demain, je substituerai la formule et vérifierai le travail, si tout est OK, alors

Je vais poster l'indicateur compilé

//+------------------------------------------------------------------+
//|                                                    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 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;
};
//---
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, "-");
    int str_size = StringLen(fut_name);
    if((str_tire > 0) && (str_size > 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;
  ma_data.exp_day = GetExpiration(Symbol());
//---
  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);
//---  
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
// Custom indicator DeInit function                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  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.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()
{
//--- TODO ---------  
  return(
0);
}
//+------------------------------------------------------------------+
// Custom indicator Calc Out Value function                          |
//+------------------------------------------------------------------+
double CalcOutValue()
{
//--- 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;
//--- return value of prev_calculated for next call
  event_cnt = rates_total;
  return(rates_total);
}
//+------------------------------------------------------------------+

Ajouté

Les paramètres correspondent au taux "Investor+".

Ajouté

Si vous négociez des devises, vous pouvez utiliser TOM (vous pouvez négocier jusqu'à tard dans la nuit, mais le pourcentage de profit est moindre).

 
Sur la base de la stratégie décritepar "prostotrader", j'ai dessiné un EA et l'ai testé sur un seul compte de test dans just2trade. En gros, tout fonctionne en contango futures-stock. 8-12% p.a. Si quelqu'un veut - le code est dans le trailer. Il y a beaucoup de choses inutiles là-dedans, car je ne faisais que peaufiner un mannequin existant. Il peut y avoir des erreurs. Je suppose qu'il ne faut pas regarder un cheval donné dans la bouche. ) Je ne décris pas l'algorithme et le code pour les mêmes raisons. Put sur le graphique des futures, symb - action, VM - pourcentage de garantie des futures, DayExp - date d'expiration des futures, "pDIVi>=12" - entrée à 12% de rentabilité par an.
Dossiers :
ST.txt  26 kb
 
Yuriy Asaulenko:

Le travail d'un trader consiste à jouer sur le marché boursier).

Pardonnez-moi, mais c'est de la terminologie. Vous ne pouvez pas vous en sortir).

Et qu'est-ce que le jeu et le travail ? Quelle est la différence ?)
Il faut travailler pour jouer, jouer est un travail en même temps.
 

Pourdiman1982

Ça marche.


indicateur en privé

 
prostotrader:

Pourdiman1982

Ça marche.


indicateur en privé

il semble bien qu'il va augmenter
Raison: