[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 402

 
hoz:

瓦迪姆,我会按照你所描述的方式来做。这就是为什么我问你一个问题。我想,也许我还没有考虑到什么。我仍然在观察自己的逻辑和其他程序员的逻辑。因为除了基本的逻辑之外,我看到我需要考虑到一些因素。

RefreshRates()在专家线程中更新历史数据。 MarketInfo()从服务器获取数据。没有必要刷新它。这是一个不必要的刹车。

如果它必须被更新,简单地调用RefreshRates()将不会有任何结果。我们必须以某种方式控制和处理整个历史到来的事件。

 
嗨,我如何使用元编辑?
 
crespo1985:
你好,如何使用元编辑器?


嗯,你好!随心所欲地使用它!这里不是你问这种问题的地方......这是一个程序员的论坛...

Zhunko:

RefreshRates()更新Expert Advisor线程中的历史数据。 MarketInfo()从服务器获取数据。它不需要被更新。这是不必要的制动。

如果它必须被更新,简单地调用RefreshRates()不能做任何事情。我们必须以某种方式控制和处理所有历史事件。

是的,我理解RefreshRates()刷新了市场数据(它们的历史到当前时间),然后市场环境变量使用最后收到的值。据我所知,这是唯一符合逻辑的变体。因此,这个函数写起来更容易、更快,也更符合逻辑和实际,更可靠,不是吗?

double fGet_TradePrice(int fi_price,    // Цена: 0 - Bid; 1 - Ask
                       string fs_symbol)   // валютная пара
{
   double ld_price = 0.0;
   
   switch (fi_price)
   {
         case 0:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);
         
         case 1:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Ask;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_ASK);
   }
}
 
hoz:

是的,我理解RefreshRates()更新市场数据(其历史到当前时间),然后市场环境变量使用最后收到的值。据我所知,这是唯一符合逻辑的变体。因此,这个函数会写得更容易、更快、更符合逻辑、更实用、更可靠,对吗?

我将这样做。

double TradePrice(int    nPriceId, // Цена: 0 - Bid; 1 - Ask
                  string sSymbol)  // валютная пара
 {
  switch (nPriceId)
   {
    case 0: return(MarketInfo(sSymbol, MODE_BID));
    case 1: return(MarketInfo(sSymbol, MODE_ASK));
    default: Print("Ошибка и прочее...");
   }
  return(0);
 }

应该写一个单独的函数来更新历史。

 

2个小时试图写一篇测试文章,以进一步测试不同的条件。

不起作用!

请告诉我这个错误。

int mm;


if (mm==0) { B=Bid; mm=1;} 

OrderSelect(0,SELECT_BY_POS,MODE_TRADES); 

if ( (Bid> B+0.0002 ) && (OrdersTotal()==0 || OrderType()==OP_SELL) ) { My_close(); My_buy (); My_modify(); }  

if ( (Bid< B-0.0002 ) && (OrdersTotal()==0 || OrderType()==OP_BUY ) ) {My_close(); My_sell (); My_modify(); }
  

问题是,订单在自己的方向上2个百分点后打开。

打开卖和结束...

 

下午好!请原谅我的琐事。这些线条来自于一个机器人,我已经有了这个机器人很多年了,基本上这种循环无一例外地从一个机器人游走到另一个机器人。

 for(int i=OrdersTotal()-1;i>=0;i--) 
      {  if(OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderMagicNumber()==magic)

为什么我的订单总额减去了1?循环是为了减少变量和,这是真的吗?

 

Kim的函数有一个时间参数="自1970年以来的日期和时间(秒"

我尝试了2种变体。

而这两者给出的利润不是当天的,而是整个历史的全部利润....。

int t=(     TimeCurrent()-( (Hour()*3600) +(Minute()*60)+Seconds()   ) ); 
int t=(    (Hour()*3600) +(Minute()*60)+Seconds()    ); 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит в валюте депозита                  |
//|             закрытых с определённой даты позиций                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
  return(p);
}
 
Dimka-novitsek:

下午好!请原谅我的琐事。这些线条来自于一个机器人,我已经有了这个机器人很多年了,基本上这种循环无一例外地从一个机器人游走到另一个机器人。

为什么我的订单总额减去了1?循环是为了减少变量和,这是真的吗?

循环计算一个索引,从0到Total-1或从Total-1到0。 这就是为什么它需要一个减号或小号< .
 
Zhunko:

我愿意。

double TradePrice(int    nPriceId, // Цена: 0 - Bid; 1 - Ask
                  string sSymbol)  // валютная пара
 {
  switch (nPriceId)
   {
    case 0: return(MarketInfo(sSymbol, MODE_BID));
    case 1: return(MarketInfo(sSymbol, MODE_ASK));
    default: Print("Ошибка и прочее...");
   }
  return(0);
 }

即使对这个窗口工具来说,通过MarketInfo() 接收数据也会在资源方面过于昂贵,你不觉得吗?

Zhunko:

你应该写一个单独的函数来更新历史。


我不太理解写一个单独的函数的逻辑。RefreshRates() 函数本身更新预定义变量的 数据。而买入卖出 是预定义的变量。如果函数RefreshRates() 更新预定义的变量,为什么还要写一些额外的函数?
 
谢谢你!!!。