新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1902

 
Vitaly Muzichenko #:

我不知道该从哪里开始。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  int H=100;
  double b, a;
  if(prev_calculated==0) {
    ArrayInitialize(Buffer1,EMPTY_VALUE);
    ArrayInitialize(Buffer2,EMPTY_VALUE);
  }

  b=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  a=SymbolInfoDouble(Symbol(),SYMBOL_ASK);

  if(rates_total-prev_calculated==1) {
    Buffer1[H+1]=EMPTY_VALUE;
    Buffer2[H+1]=EMPTY_VALUE;
  }
  else if (rates_total == prev_calculated) { // сдвигаем данные только когда количество баров не поменялось (в случае появления нового бара они сдвигаются системой терминала)
    ArrayCopy(Buffer1, Buffer1, 1, 0, H);
    ArrayCopy(Buffer2, Buffer2, 1, 0, H);
  }
  // записываем новые данные
  Buffer1[0]=b;
  Buffer2[0]=a;
  return(rates_total);
}

它应该是有效的。看看吧。

P.S. 并请写出ArrayCopy函数的速度变化有多大。我自己也想知道。

 
Vitaly Muzichenko #:

不知道从哪里开始

这里有一个关于mql5的变体。但只是为了询问价格。对于投标价格,你必须自己做。

它拥有一切,与指标缓冲区一起工作,与ticks一起工作,并举例说明如何不需要对指标缓冲区进行反向索引。

在1000条时,它的显示没有任何延迟。

附加的文件:
 
Alexey Viktorov #:

这里有一个关于mql5的变体。但只是为了询问价格。对于投标价格自行敲定。

它拥有一切,包括与指标缓冲区的工作,与ticks的工作,以及指标缓冲区的索引如何不需要反转的例子。

在1000条时,它的显示没有任何延迟。

知道了!谢谢你!

 

你好,我最近开始使用MT4,遇到了以下问题:没有适当的功能来跟踪一个已关闭的订单。我的算法很简单:当一个新的蜡烛出现时,我放置两个挂单:一个卖出止损和一个买入止损,当其中一个关闭时,我需要跟随关闭的订单(卖出止损或买入止损),放置一个订单而不是关闭的订单。下单了--这没有问题,但我不明白如何跟踪已关闭的订单,我输入了代码,但信息只显示SellSTOP,对BAYSTOP没有反应。


if (OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY))
   {
   Print("OrderType", OrderType());//Тут всегда только только "1"
   }
   if(OrderType()==0)
    {
    Print("Закрылся  BUYSTOP:", OrderTicket());
    }
   if(OrderType()==1)
   {Print("Закрылся   SELLSTOP:",  OrderTicket());} //Тут сообщает корректно - номер ордера

我还遇到了OnTrade或OnTradeTransaction 不起作用的事实,试过这个。

void OnTradeTransaction()
 {
 Print("status - "); 
 }  
 
MixanM #:

你好,我最近开始使用MT4,遇到了以下问题:没有适当的功能来跟踪一个已关闭的订单。我的算法很简单:当一个新的蜡烛出现时,我放置两个挂单:一个卖出止损和一个买入止损,当其中一个关闭时,我需要跟随关闭的订单(卖出止损或买入止损),放置一个订单而不是关闭的订单。订单已经下达--没有问题,但我不明白如何跟踪已关闭的订单,我输入了代码,但信息只显示SellSTOP,BAYSTOP没有反应。

//+----------------------------------------------------------------------------+
int LastClose()
  {
   int result=-1;
   datetime t=0;
   int i=OrdersHistoryTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderType()==OP_BUY||OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime())
                 {
                  t=OrderCloseTime(); result=OrderType();
                 }
              }
           }
        }
     }
   return(result);
  }
//+----------------------------------------------------------------------------+

MixanMOnTradeTransaction 不起作用的情况,试过这个。

这似乎是针对MT5的
 
各位朋友,大家好。
这里有一个问题。
这么多年来,这项服务的交易复制 一直没有改变。长期以来,人们的印象是,开发商根本没有兴趣考虑其游客的便利。
它采取了他们自己的项目的需要。

我不知道这是否可能?

1)我需要交易的复印机,(顾问)我不知道负载是什么,如何衡量,你需要它能够从一个复制和分发超过100个帐户。
关于抄袭的问题。我的目的是根据交易百分比获得交易量(即我的账户上有100个;我的追随者的账户上有1000个;我用我的存款的3%开立交易,交易量按我的交易百分比重新计算;即我用3%的交易是3美元;追随者用3%开立交易=30美元;即我不知道这是否真的重要)。


2) 是否可以提取签约人的账户资料?即名、姓,但最重要的是余额的数额?如果不可能撤回所有的信息,那么有什么可能呢?

3) 亲爱的程序员,请估计一下这样的工作的大概费用,我不想被欺骗,希望了解足够的价格。
谢谢你!
 
Roman Voloshchuk 复制交易,这么多年来一直没有改变。长期以来,人们的印象是,开发商根本没有兴趣考虑其游客的便利。它采取了他们自己的项目的需要。我不知道这是否可能?1)我需要交易的复印机,(顾问)我不知道负载是什么,如何衡量,你需要它能够从一个复制和分发超过100个帐户。关于抄袭的问题。我的目的是根据交易百分比获得交易量(即我的账户上有100美元;我的追随者的账户上有1000美元;我用我的存款的3%开立交易,交易量按我的交易百分比重新计算;因此,我用3%的交易是3美元,而追随者用3%开立交易=30美元。2) 是否可以提取签约人的账户资料?即名、姓,但最重要的是余额的数额?如果不可能撤回所有的信息,那么有什么可能呢?3) 亲爱的程序员,请估计一下这样的工作的大概费用,我不想被欺骗,想了解足够的价格。谢谢你!











用户数据取出来是有害的。

同样,你的账户里有50美元,杠杆率为500,而一个用户有5000美元,杠杆率为33。

这里有一点计算上的问题。那是如果我们在谈论这项服务。

如果我们谈论的是自我复制,那么。

你的账户里有50美元,杠杆率为2000,用户有5000美元,杠杆率为33。

你可以用小的杠杆开3个头寸,而订户在开完第二个头寸后就没有钱了,因为他将会把自己暴露在保证金中。

---

这不是那么简单。

 

Tretyakov Rostyslav #:
Это вроде для МТ5С

谢谢你的代码,但是你的代码也只返回偶数的订单(SELLSTOP),不知道为什么,也许是排序错误/(我在测试器中运行代码--也许这就是问题所在)。

 
MixanM #:

谢谢你的代码,但是你的代码也只返回偶数的订单(SELLSTOP),不知道为什么,也许是排序错误/(我在测试器中运行代码--也许这就是问题所在)。

我的代码返回最后关闭的订单的类型 - "0-买入 "或 "1-卖出"
 
Tretyakov Rostyslav #:
我的代码返回最后关闭的订单的类型 - "0-买入 "或 "1-卖出"

嗯,是的,这就是我的意思--它只返回 "卖出止损 "订单的数据。我把这个加到你的上面,只是为了直观地检查。

...

如果(t<OrderCloseTime())

{

t=OrderCloseTime(); result=OrderType()。

Print("Order TIP :", OrderTicket());

}

....

原因: