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

 
Artyom Trishkin:

有可能读到一张订货单

是否有类似的功能

OrderGetTicket();

for mql4?

 
Seric29:

是否有类似的功能

for mql4?

有的,只是不完全一样。选择一个订单后,你必须通过其他功能定义订单类型 和票据。

OrderSelect - Торговые функции - Справочник MQL4
OrderSelect - Торговые функции - Справочник MQL4
  • docs.mql4.com
Чтобы определить, из какого списка выбран ордер, необходимо проанализировать его время закрытия. Если время закрытия ордера равно 0, то ордер является открытым или отложенным и взят из списка открытых ордеров терминала. Отличить открытый ордер от отложенного ордера можно по типу ордера. Если время закрытия ордера не равно 0, то ордер является...
 

下午好。

有一个函数可以打开一个以i为增量的订单网格。

我需要按地段建立网格(地段),即地段1=0.01,地段2=0.02,地段3=地段2+地段1。

在fLots()函数中应该如何描述这个问题?

extern int Count       = 4;      //Количество устанавливаемых ордеров
\\


for(i=1;i<=Count;i++)
    {
     {         
      res=OrderSend(Symbol(),OP_BUYLIMIT,fLots()*i,fND(Ask-(Distance*Point+i*Step*Point)),3,fND(BuyPrice-StopLoss*Point), fND(Ask-(Distance*Point+i*Step*Point))+TakeProfit*Point,"",MAGIC,expiration,Blue);    
  
      Sleep(3000);
      if(res<0) 
         {
            Print("ОШИБКА: ",GetLastError()); 
         } else {
            RefreshRates();
         }    
     }
    }
 

我想在onInit中检查是否有任何未结头寸,但由于某些原因我无法选择它们。


   for(int i=PositionsTotal(); i>0; i--)
      {
      smbol = PositionSelect(PositionGetSymbol(i));
      tickett = PositionGetTicket(i);
      
      Print("ticket(",i,") = ", tickett);
      Print(smbol);

      }
   Print("Position Total = ", PositionsTotal());

我得到。


2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Position Total = 1



 
psyman:

我想在onInit中检查是否有任何未结头寸,但由于某些原因我无法选择它们。


我得到。


2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Position Total = 1



它马上就吸引了我的目光。

for(int i=PositionsTotal(); i>0; i--)

我没有进一步看,因为在逆向循环中应该是这样的。

for(int i=PositionsTotal()-1; i>=0; i--)
 
Artyom Trishkin:

这立即引起了我的注意。

我没有再看下去,因为在逆向循环中应该是这样的。

我更喜欢这种记法

for(int i = PositionsTotal(); i-- > 0;)
 
Alexey Viktorov:

我更喜欢这个条目

嗯...我为初学者展示了一个可以理解的;)

 

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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); } // код Кима изменил на это и теперь от считает профит за сегодня и обнуляется в полночь double GetProfitFromDateInCurrency1(string sy="0", int op=-1, int mn=-1) {   double p=0;   int    i, k=OrdersHistoryTotal();   datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));   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); }

你好。请帮助我计算昨天、前天等已关闭交易的利润。 我想做的是今天的利润:。 昨天的利润,前天的利润。

我复制了代码/用于今天的利润计算。

或者如何设置今天的利润,将这个值推迟到昨天的利润,然后再推迟到前一天的利润
附加的文件:
 
Lomonosov1991:

你好。请帮助我计算昨天、前天等已关闭交易的利润。 我想做的是今天的利润:。 昨天的利润,前天的利润。

要计算今天的利润,复制代码/。

或如何使价值从今天的利润走低到昨天的利润,然后到前天的利润

在函数描述中增加一个参数,并改变检查条件。

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dtstart, datetime dtstop)
....
if (OrderCloseTime()>=dtstart &&  dtstop<=OrderCloseTime()) {
 
感谢伊戈尔-马坎。我昨天做了这样的函数
double GetProfitFromDateInCurrency2(string sy="0", int op=-1, int mn=-1)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;
  datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));

  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() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
  return(p);
}
我在前天做了这样的功能
double GetProfitFromDateInCurrency3(string sy="0", int op=-1, int mn=-1)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60*2;
  datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;

  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() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
  return(p);
}
你可以让它在周末不重置为零吗?即昨天的周一是周五。也就是把周末也去掉?
附加的文件:
Screenshot_2.png  844 kb
原因: