[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 287

 
では、正しいコードを見ることができるようになるのでしょうか?
 
sergeev:
最初の非購入注文で、アカウントに購入注文が殺到することになります。


ありがとうございました。またもや間違い発見!

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

extern double lots=0.1;
extern int SlipPage=3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if (OrdersTotal()==0)
   OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
  for (int j = 0; j < OrdersTotal(); j++)
   {
    OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol())
     {
      if (OrderType() != OP_BUY)
       OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
     }
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
icas:


ありがとうございました。別のエラーを発見!


うんうん。

が、前作は直っていない。

注文開始を即座にループに入れることはできない。まずオーダーをフルループして、Buyがあるかないかを正確に調べる必要があります。

そして、そのサイクルの後に初めて、「買い」を入れるのです。

 
sergeev:

うんうん。

が、前作は修正されていなかった。

注文開始をすぐにループに入れることはできない。まず、注文をフルループして、BuyかNoかを正確に調べる必要があります。

そして、その後に初めて、まだなければ買いを入れるのです。



そうですね、プログラムのポスティをやり直さずにそのままパクっただけです。今すぐやる - 5分...
 
しかし、このコードも正しくないのです他の金融商品の注文がない場合にのみ買い注文 を出し、他の注文がある場合には、買い注文を出しません。
 
icas:

そうですね、プログラムのポスティをやり直さずにそのままパクっただけです。今すぐやる - 5分...
//+------------------------------------------------------------------+
//|                                                      OnlyBuy.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double lots=0.1;
extern int SlipPage=3;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  for (int j = 0; j < OrdersTotal(); j++)
   {
    OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol())
     {
      if (OrderType() == OP_BUY) return(0);
     }
   }
  OrderSend(Symbol(),OP_BUY,lots,NormalizeDouble(Ask,Digits),SlipPage,0,0,NULL,0,0,Red);
  Sleep(10000); //Пауза 10 сек. для исполнениея ордера
//----
   return(0);
  }
//+------------------------------------------------------------------+
今でしょ?
 
icas:
それは今?
Sleep(10000); //Пауза 10 сек. для исполнениея ордера

この間は何のためにあるのか?
 
kolyango:

なぜ間が空くのか?

注文がすぐに実行されるわけではありません。次のティックで休止しないと、注文がまだ開かれていない可能性があり、プログラムはそれを開くために別のコマンドを送信します。MT5テスターでは、すでに実行遅延を入力することができます。
 
icas:
今は正しいのでしょうか?

アイテムの有無の検索を別の機能にしてみましたか?

例えば、こんな感じです。

bool ExistPositions(int mn, string sy="", int op=-1) {
   if (sy=="") sy=Symbol();
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderMagicNumber()!=mn)   continue;
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()>1)            continue;
         if (op<0 || OrderType()==op)  
            return(True);
         }
      }
   return(False);
}

マジック - EAのマジックナンバー(設定で設定、またはEAが自動的に生成)。そして、現在のシンボルによる位置Buyがないことを確認するために、書き込む必要があります。

if (!ExistPositions(Magic, Symbol(), OP_BUY)) {
   // ... Тут код для вызова функции открытия позиций ... 
   }

注 - 単に買い注文を開くコマンドではなく、注文を開くためのすべてのパラメータとサーバーから返されるエラーを処理する完全な機能です。

しかし、テスターとしては、入力されたパラメータが有効な値であるかどうかのチェックはしなくてもいいのですが...。

 
artmedia70:

アイテムの有無の検索を別の機能にしてみましたか?

例えば、こんな感じです。

そして、現在のシンボルによる買いポジションの不在を確認するために、書き込む必要があります。

注 - 単に買い注文を開くコマンドではなく、注文の開始に関するすべてのパラメータとサーバーから返されるエラーを処理する完全な機能です。

しかし、テスターは入力されたパラメータが有効な値であるかどうかをチェックせずに行うことができる......。



最初の投稿で私は関数をあげましたが、kolyangoは それに満足しませんでした。また、マジシャンと一緒に仕事をするのは好きではありません。