MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 823

 
Artyom Trishkin:

オーダーチケットの 読み取りが可能です。

同様の機能はありますか

OrderGetTicket();

mql4用?

 
Seric29:

同様の機能はありますか

mql4用?

ありますよ、ただ、まったく同じではないんです。注文を選択した後、他の機能で注文の種類と チケットを定義する必要があります。

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

こんにちは。

ロットを i 単位で増加させた注文のグリッドを開く機能があります。

例えば、lot1 = 0.01, lot2 = 0.02, lot3 = lot2 + lot1 ... というように、グリッド(ロット)をロット単位で構築する必要があるのです。

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:

こんにちは。昨日、一昨日などのクローズしたトレードの利益を計算するのを手伝ってください。 今日の利益:.昨日の利益, 一昨日の利益

今日の利益を計算するために、code/をコピーします。

あるいは、今日の利益から昨日の利益へ、そして一昨日の利益へと値を下げていく方法。

関数の説明にパラメータを1つ追加し、チェック条件を変更する。

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dtstart, datetime dtstop)
....
if (OrderCloseTime()>=dtstart &&  dtstop<=OrderCloseTime()) {
 
Igor Makan氏に感謝します。昨日、このような関数を作りました。
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