[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 483

 
次に赤い矢印の売りを削除して、買いを入れる必要があります。突然、2つの注文が削除された!!!!注文が2つ、明らかに決まっているものと、あるようでなかったもの!!!!もういいや、地獄に落ちろ...。エラー129が表示され、注文がない。こんな風に、善良なボランティアヘルパーの皆さんを困惑させてしまっては申し訳ないです。
 
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot         = 1;                          
  extern int     taymfreym   = 0 ;                           
  extern double  stoplos     = 200 ;                          
  extern double  takeprofit  = 500 ; 
  extern int     magicnumber = 350;
  extern int     ControlBar  = 1;      // номер бара на котором снимаем показания индикатора                     


void BreakPoint()
{//if (!IsVisualMode()) return(0);
    keybd_event (19,0,0,0);
    Sleep (10);
    keybd_event (19,0,2,0);
}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
{
  //Print (   "  Начало " ); 
//----
    for (int A = 0; A <100 ; A++) // ни к чему этот перебор баров
    {
        double strela1 = iCustom (NULL, taymfreym, "индикатор", 2, A),
               strela2 = iCustom (NULL, taymfreym, "индикатор", 3, A);
        int BUY = 0, SELL = 0, ticket; 
        Print (A, "  strela1 " , strela1 , "    strela2  " , strela2);
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {  
        if (!OrderSelect (i - 1, SELECT_BY_POS)) continue;  // Если есть следующий
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber() != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        ticket = OrderTicket();
        if (type == 0) {BUY++; Print ("BUY++   " , BUY  ,"  ticket ", ticket); break;}
        if (type == 1) {SELL++; Print ("SELL++   " , SELL  ,"  ticket ", ticket); break;}
    }
    if (strela1 < strela2)
    {
        if (SELL > 0) udalenie (OP_SELL);
        if (BUY == 0)
        {
            OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
            Print ("strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
            NormalizeDouble ( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits));
        }
    }
    else if (strela1 > strela2)
    {
        if (BUY > 0) udalenie (OP_BUY);
        if (SELL == 0)
        {
            OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print ("strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
            NormalizeDouble (Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits);
        }
    }
    }
    BreakPoint();     
//----
    return (0);
}
//+------------------------------------------------------------------+

void udalenie (int Type = -1)
{
    int total = OrdersTotal();
    for (i = total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber( ) != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        if (Type > -1) if (Type != type) continue;
        bool result = false;
        switch (type)
        { 
            case OP_BUY       : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
            case OP_SELL      : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
        }
        if (!result)
        {
            int error =  GetLastError(); 
            string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
            Print (errorcomment);
        }  
    }       
}
 
待ってください、失礼します!伝票を貼りまくります。
 
Dimka-novitsek:
次に赤い矢印の売りを削除して、買いを入れる必要があります。突然、2つの注文が削除された!!!!注文が2つ、明らかに決まっているものと、あるようでなかったもの!!!!もういいや、地獄に落ちろ...。エラー129が表示され、注文がない。善良なボランティアヘルパーの皆さんを困惑させることをお許しください...

Dimka - 私の個人的なメッセージであなたのコードを与える - 私は周りを混乱させる - 私の"杯"がテストされている間、私は何もすることがありません...と、脳みそが鍛えられそうです...。そして、忘れてはならないのが、嗜好品...。
 

皆さんこんにちは、初心者なのであまり蹴らないで下さいね。いくつかの疑問が蓄積されました。

1) 見積もりの全履歴はどこでダウンロードできますか。MT4ターミナルでは、デフォルトでMetaQuotesの相場がダウンロードされることは理解していますが、2012年1月から2012年10月までギャップがあり、再ダウンロードしてもクローズされないのです。これは、そこからの歴史全体に疑問を投げかけるものです。

2)履歴は1999年以前の日付を持っている、それらのためのデータいくつかの奇妙な、非常に少ない、分でも。それらを考慮したり、削除したりする人もいるのでしょうか。

3)その他、ナンセンスなテストが行われている。Open[1]<MA1 && Close[1]>MA1 で買い、というシンプルなExpert Advisorを書いて みることにしました。テストの際、MA(指数)は最初のテスト日により常に異なる値を示す。この場合、МА周期が長くなるほど(例えば1000~1200周期)、誤差は大きくなります。 何が問題なのでしょうか?

 
Dimka-novitsek:

ありがとうございました。コードがよりシンプルになりました。確かに、よりシンプルになりましたね。

スリッパをありがとうございました

ループ for (int A = 0; A <100 ; A++) // このバーの検索は必要ありません。EAが矢印のあるところやエラー番号のあるところに正確に注文を出したことをログから確認するのに役立つだけです。要はテスターで信号が出なかったということです。同じプリントで変数arrow1とarrow2が全てのバーで0にしかなっていないのを確認し、その状態から抜け出しました。

もちろん、このサイクルはどちらの方向にもカウントできる。しかし、またしてもいたるところでエラー129を目にすることになるのですチャート上にインジケーターの矢印が表示され、それによって注文が出されたことを確認したいのです。そこで、冒頭のスクリーンショットで変数矢印1and2が等しく、さらにゼロから17バーで、順序が設定されている - okey、スーパー!。そして、プリンターのメッセージで、ソレとソレのティックで売りがあり、さらにバーの矢印が等しくなっています - 素晴らしい!!!!

サイクルについて

for (int A = 0; A <100 ; A++)

何かをする(コードを書く)前に、何を得たいかを明確にする必要があります。このインジケータは、すべてのティックに 表示され、その読み取りの完全なレイアウトを持つことができます。この方法(ループ)では、変数strela1とstrela2に100 本目のバーの読み取り値を出力し、これらの読み取り値で取引することができます(昨年の冬)...:))) 一瞬気を抜いたのですが、インジケーターの読み取りのループにトレーディング操作を組み込んでいたのですね、完全なP...もちろん、あなたが一番よく分かっているはずです。:)))

 
いいえ、ループは入退室を確認するため、つまりロボットをテストするために必要なのです。発注の仕方、ミスの仕方。まあ、テスターでテストしないんですけどね...。
 
Dimka-novitsek:
いいえ、ループは入退室を確認するため、つまりロボットをテストするために必要なのです。発注の仕方、ミスの仕方。テスターでテストができない...。

なんというか、GENIAL...。がんばってください。

追伸:私のコードでは、注文の列挙の方向の変更に関連して小さなエラーが見つかりました、さらにコードを削減するだけでなく、テスターで最適化を作成する試みをしました(それを自分で確認してください)。
そして、インジケータから正しくデータを読み取れていない疑いがあります。インジケータは複数のバッファを持ちます(私のバージョンでは4つ)。矢印を描くものなど、矢印のあるところだけに値を持つものもあります。このようなバッファでシグナルを検索するには、戻り値が「空」の値と等しくない(私の変形ではEMPTY_VALUE)ことを条件とするループ(while())を組織する必要があります。これらのバッファに)「矢印がない」ところでは、戻り値を価格と比較することで信号を探さなければならない。

ファイル:
lxvhlxyx.mq4  5 kb
 

昼でも夜でもOK!mt4の開発者の方々、また他の皆様にも質問です。

MTクライアントの最小システム要件は?

Athlon 800mg、512mb、XP SP3という古いハードで動かしたいのですが、どうすればいいですか?MT4や5を動かすと、2秒後にシャットダウンしてしまう。問題は明らかにワインドアップやハードウェアにあるのではなく、このハードウェアはデバッガー付きのVisual Studioが 動作し(私自身プログラマーです)、システムで例外は発生しません(私のデバッガーが動作しないので)。クライアント自身が何かを嫌がって、結果的に閉じてしまうんでしょうね。そこで質問ですが、mtが嫌がる理由は何ですか、本当にCPUの周波数ですか?))

 
Dimka-novitsek:
待ってください、失礼します!伝票を貼りまくります。
ディミトリ、自分の考えをしっかり持って、ここに質問を書き込んでください。