どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 415

 
Link_x:
こんにちは! 「金」機能で、最後のオープンオーダーから利益額を計算するような機能はないでしょうか? 見つかっていません、今は最後のオープンオーダーの利益率を計算する自作関数に頭を悩ませています。





オーダープロフィット()

もし、最後に開いた注文を正確に知りたい場合は、すべての注文を調べ、最新の時間を 選択し、上記の関数を使用して、この注文の純利益を返します。

 
Ekburg:


オーダープロフィット()

もし、最後にオープンした注文を正確に知りたい場合は、すべての注文を調べ、最新のオープン時間を持つものを選択し、この注文の純利益をあなたに返す、上記の関数を使用します。


解決策を見つける瞬間に、ジャストインタイムで答えが出る方法。:)
Pips_Proffit_Last_Pos = p - PriceOpenLastPos;
でも、とにかくありがとうございます
 

Ekburg К сожалению времени и возможности написать Вам готовый код нет, так как я на работе нахожусь))

履歴ではなく、現在の位置から検索することで、論理的な連鎖が生まれ、それを元にコードを書いてみることができます。

[ミューウイングスとの連携と発注のブロック】。]

1 チケットと注文時のマジックナンバーを覚えておく

2 注文の数を監視し、市場に注文がない場合(それは我々の注文が閉じられたことを意味する)、ポイント3へ 行くか、その特定の注文をその終了時間がゼロ以上になるまで監視し、その場合、ポイント3 および4を 除外する。

3 注文を探す

4 閉店しているかどうかを確認する

5 閉鎖された経緯を調べる

6 ストップで決済された場合、それとは異なる方向に別の注文を設定する


//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


extern double Lots = 0.1;
extern double TakeProfit = 100;
extern double StopLoss = 100;       
extern double TrailingStop = 50;
extern double Margincutoff = 100;   
extern double MagicNumber = 12345;
extern double TradeSizePercent = 5;
extern int Slippage = 10;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
  
  int Crossed (double line1, double line2)
  {
  static int last_direction=0;
  static int current_direction=0;
  
  if (line1>line2)current_direction=1;// пересечение вверх
  if (line1<line2)current_direction=2;// пересечение вниз
  
  if (current_direction!=last_direction)//изменения произошли
  {
  last_direction=current_direction;
  return(last_direction);
  }
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
    int cnt, ticket, total, totalhistory, memoryticket;
    double shortEMA, longEMA;
    
    if(Bars<100) 
     {
     Print("Bars less than 100");
     return(0);
     }
     shortEMA=iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
     longEMA=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
     int isCrossed=Crossed(shortEMA, longEMA);
//----
   total=OrdersTotal();
   if(total<1) 
     {
      // нет открытых ордеров
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // проверяем пересечение МА для открытия позиции на покупку
      if(isCrossed==1)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"МА",12345,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
        //проверяем пересечение МА для открытия позиции на продажу
        if(isCrossed==2)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"MA",12345,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
         return(0); 
        }  
//----начинаем искать закрытые ордера

         //инициализация параметров
  
  int old_order_type;
 
   
  RefreshRates();
  
  //нет открытых ордеров - ищем в истории закрытых ордеров последний закрытый именно этим советником ордер 
  for ( totalhistory = OrdersHistoryTotal() - 1; totalhistory >= 0; totalhistory-- ) 
  {
     if ( OrderSelect(totalhistory, SELECT_BY_TICKET, MODE_HISTORY) && OrderTicket() == memoryticket && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() )
     {
         old_order_type = OrderType();
         if ( OrderProfit()<0 ) //последний закрытый советником ордер был убыточным, значит, следующий ордер открываем в направлении, противоположном закрытому с убытком
         {
                break; //прекращаем поиск
         }
     }
  }
  //если раньше покупали, то теперь продаем
  if ( old_order_type == OP_BUY )
  {
  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,"MA",12345,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
 //если раньше продавали, то теперь покупаем
  if ( old_order_type == OP_SELL )
  {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,"МА",12345,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
            memoryticket= OrderTicket();// запомнили тикет
            Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
   return(0);
  }
//+------------------------------------------------------------------+
これが私の持っているものです。本当に3区画開きます。本当にもうダメだ。コードを修正してもらえますか?どうしたんですか?
 
私はこれらの質問(信じられないほど神経質、ピ****、申し訳ありません(クソ変数私は見つけることができない(主に迷惑、私自身を見つけることができないもの)))にうんざりしている。

現在の価格値には、どの変数が関係しているのでしょうか?
ドキュメントを検索しても、Bid, Ask,POINT_HIGH, POINT_LOW 以外に何も出てきません。
そんな変数が存在するのか?
 
Link_x:
私はこれらの質問(信じられないほど神経質、ピ****、申し訳ありません(クソ変数私は見つけることができない(主に迷惑、私自身を見つけることができないもの)))にうんざりしている。 現在の価格値には、どの変数が関係しているのでしょうか? ドキュメントを検索しても、Bid, Ask, POINT_HIGH, POINT_LOW 以外に何も出てきません。 そんな変数が存在するのか?




マーケットウォッチ」ウィンドウで価格がどのように変化するか、お気づきでしょうか?そこにはBidとAskの価格が 表示されています。1枚目は売るとき、2枚目は買うときに使います。
 
Link_x:

解決策を見つけたときだけ、いかにタイムリーに答えを出せるか。:)
解決策は「じっくりと質問すること」。そして、いつも有能な答えが得られるとは限らないことを考えると...。:)))
 
khorosh:
Market Watchウィンドウの価格がどのように変化するか、お気づきでしょうか?そこには、BidとAskという現在の価格が表示されています。前者は売るときに、後者は買うときに使う。

そのとおりです。
こんな小さなことを忘れていた!?
 
TarasBY:
解決策は、「焦って質問しないこと」です。そして、いつも有能な答えが得られるとは限らないことを考えると...。:)))
はい、そうです。:)
 
Link_x:
そうなんです!!!
そんな些細なことを忘れていた!!!

試験で本当の学生のように、正しく答えるのです:知らないとは言えません-忘れたと言わなければなりません)))
 
Link_x:
ええ、そうです。:)

自分で質問するよりも、他の人の質問に答えるようにしたほうがいいのでは?メリットの方がはるかに大きい(ある程度まで)、確かに自分へのメリット