初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 135

 
zfs:
平均的な利益トレードではスリッページをカバーできず、収益性も小さいので、はまる可能性もある)。

Expert Advisorは自分で書きました。ストップロスは入っていません。

 
PetrovichV:

専門家は自分で書いたんだ。ストップロスがついていない。

それはさらに悪いことだ)。
 
zfs:
さらに悪いことに)。
ありがとうございます。
 

解決策が見つかったので、自分の質問に答えようかな。誰がググってくるかわからないし...。

履歴から最後の注文の始値を求める方法についての質問でした。その結果、(少なくとも私にとっては)それが正しいことが判明しました。私は注文の価格ではなく、取引の価格を取得しなければなりませんでした。テスターでは、初期のバリアントも動作しました(私が書いたものではありません)。違いは、デモ版では価格の代わりに「市場価格」とだけ表示され、ダブルで要求しようとすると、なぜかゼロが返される点にあると思われます。くそくらえで、今はこのような関数になっています。

PositionID = PositionGetInteger(POSITION_IDENTIFIER);

double FindLastPrice(long PositionID) {
   int  i = 0, DealsTotal;
   ENUM_DEAL_TYPE CheckType;
   long Ticket, OldTicket = 0, PosID, Magic, Type;
   double OrderPrice = 0;
   
   DealsTotal = HistoryDealsTotal();
   
   for (i = 0; i < DealsTotal; i++) {
      Ticket = (int)HistoryDealGetTicket(i);
      PosID  = HistoryDealGetInteger(Ticket, DEAL_POSITION_ID);
      Magic  = HistoryDealGetInteger(Ticket, DEAL_MAGIC);
      Type   = HistoryDealGetInteger(Ticket, DEAL_TYPE);
      
      if (Sell) CheckType = DEAL_TYPE_SELL; 
      else CheckType = DEAL_TYPE_BUY;
      
      if ((PosID == PositionID) && (Magic == MagicNumber) && (Type == CheckType)) {
         if (Ticket > OldTicket) {
            OrderPrice = HistoryDealGetDouble(Ticket, DEAL_PRICE);
            OldTicket = Ticket;
         }
      }
   }
   if(!OrderPrice) Print("Ошибка получения цены открытия предыдущей сделки! Error ",GetLastError());
   return(OrderPrice);
}

このくだらないことのために数時間を費やさなければなりませんでしたが、少なくとも何事にも利点はあります。この動かない機能のために、私は回避策を考案しなければならず、同時に、新しい注文価格をファイルに書き出し、必要に応じてそれを読み出すという愚かな方法でファイルを扱う基本作業をマスターしなければなりませんでした...。

 
Lone_Irbis:

解決策が見つかったので、自分の質問に答えようかな~と、ググっている人がいたら念のため...。

履歴から最後の注文の始値を求める方法についての質問でした.

そして、サイト内の検索を使ったり、すでに何かある記事に目を通したりしていただければと思います。

>>MQL5レシピ - ポジションプロパティを取得するための取引履歴と関数のライブラリ

 
tol64:

そして、サイト内検索を使ったり、何もないところで記事に目を通したりすればいいんです。

>>MQL5レシピ - ポジションプロパティを取得するための取引履歴と関数のライブラリ

このサイトを1週間ほどググってみたのですが(つまりGoogleで。内蔵の検索は、関連性ではなく、まったく正確でないものをランダムに表示したり、同じドキュメントからコピーした要求に対しても「何も見つかりませんでした」と言ったりするので)...。しかし、有用なものを見つけるには、それが何と呼ばれているか、既存の非動作版とどう違うかを正確に知っておく必要があります :)それなりのレベルの言語を知っている人の立場から検索について語るのは簡単ですが、mql5という名前を知って1週間、すでにその中で何かを作ろうとしている人は難しいですね......。

それに、既成のソリューションや詳細なマニュアルは、コンセプトとしてあまり好きではなく、自分で作ろうという気が失せるだけなんです。:)私の自習のやり方はあまり効果的ではないのかもしれませんが、それよりも面白いことが重要で、そうでなければ、このテーマに個人の時間を投資する熱意は長くは続かないのです。

それにしても、リンクありがとうございます、読んでみます。

 

こんにちは。

20~30年分の通貨のヒストリカルデータをダウンロードする方法はありますか?

アルファフォレックスではここ12年間だけですが、それ以前は断片的なものです。

 
PetrovichV:

こんにちは。

20~30年分の通貨のヒストリカルデータをダウンロードする方法はありますか?

アルファフォレックスではここ12年間だけですが、それ以前は断片的なものです。

ブローカーが履歴を出すと、期間を長くすると品質が低下する。
 

ここでは、買い注文を 出した後、そのSLとTPを変更するコードです。

2013.09.06 00:03:39 Trades '10022332': failed modify order #0 buy 0.00 GBPUSD at market sl: 0.00000 tp: 0.00000 -> 1.56255, sl: 1.55787 tp: 1.56787 [Invalid request] [無効なリクエスト]を修正しました。
レベル変更要求の何が問題なのか?

int Positions;
double delta=0.00500;

MqlTradeRequest  Request;
MqlTradeResult   Result;
MqlTick         InfoTick;


void OnTick()

{
//---

 if(PositionsTotal()==0) // если открытых позиций нет, покупаем
   { 
      
    SymbolInfoTick(_Symbol, InfoTick);
                              
    Request.action=TRADE_ACTION_DEAL;
    Request.symbol=_Symbol;
    Request.volume=1;
    Request.price=InfoTick.bid;
    Request.sl=InfoTick.bid - delta;
    Request.tp=InfoTick.bid + delta;
    Request.deviation=50;
    Request.type=ORDER_TYPE_BUY;
    Request.type_filling=ORDER_FILLING_FOK;
               
    OrderSend(Request, Result);
   
  }else{                                     // меняем уровни
        SymbolInfoTick(_Symbol, InfoTick); 
        
        Request.action=TRADE_ACTION_MODIFY;
        Request.symbol=_Symbol;
        Request.sl=InfoTick.last - delta;
        Request.tp=InfoTick.last + delta;
                          
        OrderSend(Request, Result);
       }
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
agvozdezkiy:

ここでは、買い注文を 出した後、そのSLとTPを変更するコードです。

2013.09.06 00:03:39 Trades '10022332': failed modify order #0 buy 0.00 GBPUSD at market sl: 0.00000 tp: 0.00000 -> 1.56255, sl: 1.55787 tp: 1.56787 [Invalid request] [無効なリクエスト]を修正しました。
レベル変更要求の何が問題なのか?

手始めにエラーコードを取得します。
理由: