Meta Trader中的价差交易 - 页 142

 

朋友 !!!!我决定再给自己一次冲击,写一个基于限价订单的EA,我将很高兴得到任何帮助。我已经根据Kim的功能建立了限价订单。我目前正试图根据tick统计(https://www.mql5.com/ru/forum/125272) 获得平均数和偏差(因为我认为它们更可靠),以建立仓位。我们将不得不实现一个模块,将限价订单移到价格后面,并实现一个模块,在利润达到一定程度时关闭头寸。

 
Scorp1978 >>:

...... Надо будет реализовать модуль передвижки лимит ордера за ценой и модуль закрытия позиций при достижения профита определенного.

下面是移动订单的代码。啤酒算你的!

extern bool    Modify =True;
extern int     DistanceSet=14;//в пунктах
//-----------------------------------

if (Modify == true) {//если выключатель модификации включен
//если есть отложенный ордер и нет откр. одноименных позиций и
// расстояние от текущей цены превышает величину DistanceSet - модернизируем
// - т.е. подтягиваем к текущей цене
if(NumberOfOrders(NULL,OP_BUYLIMIT,Magic)>0 &&  NumberOfPositions(NULL,OP_BUY,Magic)<1){
  if( ExistOPNearMarket(NULL,OP_BUYLIMIT,Magic,DistanceSet)==0 ) { 
    for (int isl_= OrdersTotal()-1; isl_>=0; isl_-- )                  {
    if(OrderSelect(isl_,SELECT_BY_POS,MODE_TRADES))                 {
     if(OrderSymbol()==Symbol() )                                   {
      if(OrderType()==OP_BUYLIMIT && OrderMagicNumber()==Magic)      { 
      double pAsk=Ask-DistanceSet*Point;            
      if (sl!=0) double ldStop=pAsk-sl*Point;
      if (tp!=0) double ldTake=pAsk+tp*Point;         
     OrderModify(OrderTicket(), pAsk,ldStop,ldTake, 0, DarkGreen);
      Print("Modify OP_BUYLIMIT ");  Sleep(500);  RefreshRates(); }
      }}}}}
if(NumberOfOrders(NULL,OP_SELLLIMIT,Magic)>0 && NumberOfPositions(NULL,OP_SELL,Magic)<1){      
  if( ExistOPNearMarket(NULL,OP_SELLLIMIT,Magic,DistanceSet)==0 ) { 
   for (int isl= OrdersTotal()-1; isl>=0; isl-- )                  {
    if(OrderSelect(isl,SELECT_BY_POS,MODE_TRADES))                 {
     if(OrderSymbol()==Symbol() )                                   {
      if(OrderType()==OP_SELLLIMIT && OrderMagicNumber()==Magic)      { 
       double pBid=Bid+DistanceSet*Point;  
       if (sl!=0) double ldStop_=pBid+sl*Point;
       if (tp!=0) double ldTake_=pBid-tp*Point; 
     OrderModify(OrderTicket(), Bid+DistanceSet*Point,ldStop_,ldTake_, 0, DarkGreen);
      Print("Modify OP_SELLLIMIT");  Sleep(500);  RefreshRates(); }
      }}}}}            
}//выключатель модификации 
其中,-函数ExistOPNearMarket()
//这个函数返回一个标志,表示在市场附近存在一个订单或一个头寸。
//(在离市场指定的点位距离)。更准确地选择要检查的订单或头寸
要//检查的订单或头寸是由外部参数设定的。
/sy - 仪器的名称。如果该参数被设置,函数将验证
只检查指定符号的//顺序或位置。"" 或 NULL 表示
//当前符号。
//op - 交易操作,订单或头寸类型。有效值:OP_BUY。
// OP_SELL, OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP或-1。
//默认值为-1意味着任何交易操作。
//mn - 订单或位置标识符(MagicNumber)。默认值-1
// - 任何标识符。
//ds - 以点为单位的市场距离。默认值是1000000。
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь                                                                |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание : Возвращает флаг существования позиции или ордера около рынка |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" или NULL - текущий символ) |
//| op - торговая операция ( -1 - любая операция) |
//| mn - MagicNumber ( -1 - любой магик) |
//| ds - расстояние в пунктах от рынка ( 1000000 - по умолчанию) |
//+----------------------------------------------------------------------------+
bool ExistOPNearMarket(string sy="", int op=-1, int mn=-1, int ds=1000000) {
  int i, k=OrdersTotal(), ot;
  if (sy=="" || sy=="0") sy=Symbol();
  double p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
  ot=OrderType();
  if ((OrderSymbol()==sy) && (op<0 || ot==op)) {
  if (mn<0 || OrderMagicNumber()==mn) {
  if (ot==OP_BUY || ot==OP_BUYLIMIT || ot==OP_BUYSTOP) {
  if (MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())<ds*p) return(True);
  }
  if (ot==OP_SELL || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
  if (MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))<ds*p) return(True);
  }}}}} return(False); }

和NumberOfOrders()函数 -
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает количество ордеров.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }}}}  return(ko);}                        
 
rid


非常感谢,crunch给了我一个函数来计算任何时期的ticks的平均值,我也答应给他一杯啤酒,我得一次装满一箱:)))),我希望我自己不要喝得太高兴!!!!!。

 
今天在mt4 B邮件中收到了一封信。
//-----------------------------
"尊敬的客户,请注意,从2010年4月14日开始,与BT-08协议附录第1.3.6条相应的行动 将生效。
1.3.6 资产负债表的固定。
1.3.6.1贸易差额 的确定过程应在每日进行,在互换应计过程之前进行。
该程序包括自动计算所有已执行交易的财务结果,并将其与交易账户的当前余额进行比较。如果有差异,交易账户余额将按差异的金额进行修正。
从这一刻开始,修复平衡的程序将每天进行。
在此程序之后,交易账户上的财务结果出现差异,你可以联系技术支持部门....."
//------------------------------------------------
我搞不清楚这到底是什么?
数额上的差异是什么?在理论上,它来自哪里?
我们在这里谈论的是什么呢?
И - "....交易账户的余额将被调整" - 如何调整?

 

我恐怕是错的,但BT-08协议的第1.3.6.1条,给了公司另一个蚕食客户的机会。
理论上,差异会从哪里来?
有两种可能性。
第一个是,如果你的订单在非市场价格下被执行(你知道,尖峰和其他失败)--公司将决定这种订单的命运,并确定什么是 "非市场价格"。但这种情况并不经常发生,也没有那么糟糕。
第二种选择对交易员来说更为重要。让我们设想一下,在定盘时,公司将扩大交易价差。这意味着你所有的未结头寸 的总利润将减少,而这个差额将从余额中扣除。这个程序将由公司在每个交易日结束时进行,它将像一个隐藏的交换...没有魔鬼,没有魔鬼能阻止公司这样做......。她是CFD的女主人......

当然,每个人都愿意相信公司的诚信,相信它不会这样作弊......时间会证明一切......,但人们必须找到地方为海外诉讼和昂贵的律师筹集资金......

 
GEFEL >>:

.....
Второй вариант более важен для трейдера. Представим себе, что на момент фиксинга, компания будет раздвигать торговые спреды. Это значит, что по всем Вашим открытым позициям суммарный профит будет уменьшаться, и эта разница будет списываться с баланса... Такую процедуру компания будет проводить в конце каждого торгового дня, - и это будет похоже на скрытое свопирование........

只是想.....
点差在每天的会期日收盘时确实扩大了不少(对于那些每日会期之间有休息的工具,即几乎所有商品和期货--对于我们的交易方法)。
这一点并不十分清楚。在这种情况下,权益(资金)会暂时减少,但余额不会减少。
这些职位仍然开放,余额不能有任何变化。
而如果这种 "扩大 "的价差(当新的会期开启时)被写进余额中,就很难理解了。
我每天晚上都要保存一份详细的报表,并严格地与早上的 "新余额 "进行比较。
显然是这样。

 
一位朋友把这个问题交给了技术支持人员。
将得到答复。
http://www.procapital.ru/showthread.php?p=649145#post649145
 
rid писал(а)>>
一个熟人把这个问题交给了技术支持人员。
将得到答复。
>> http://www.procapital.ru/showthread.php?p=649145#post649145


我也看了技术支持的回答,我明白不会发生什么事(希望如此)。

 

余额=资金+未结头寸 的总利润...

 

而答案中的这句话,用红色标出,并没有困扰你......再次重申,已结束的交易不会受此影响,它们的所有数字将保持不变。只检查最终的账户余额。
当然,没有人打算修复已经关闭的位置。这将是一次入室盗窃。但他们可以进入开放的...
我没有一个真正的B......我有点不在乎,但你真的建议安排一个晚上和早上的平衡对账......