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

 
paladin80:
冒頭の中括弧{は、price[...]=Ask;の前に置く必要があります(下記参照)。if "演算子について、もう一度お読みください。ifの直後に括弧がない場合、1つのアクションしか処理しません(price[...]=Ask;となります)。複数のアクションが必要な場合は、ifの直後に{...}で囲む必要があります。

ありがとうございます。ただ、ご指摘の通り、if文の直後に括弧をつけました。
しかし、何も変わりませんでした。 スクリーンショットをご覧ください。
で、価格は下がり、1.2100と1.2200のレベルを越え、オペレータによるポジションは

1.2100と1.2200で買いポジションをオープンする場合 - オープンしませんでした。


 
alex12:
ありがとうございます。しかし、ご指摘の通り、if文の直後に括弧を付けました。
スクリーンショットをご覧ください - Expert Advisor が買いポジションを開いたことを示しています。
で、価格が下がり、1.2100と1.2200のレベルを越えて、オペレータの条件によるポジション

1.2100と1.2200で買いポジションをオープンする場合 - オープンしませんでした。


オーダーエンドの後にリターン演算子を入れて、ティックの処理を終了させる必要はないのでしょうか?
 
alex12:
ありがとうございます。しかし、私はあなたが示唆したように、if文の直後に括弧を入れ、 、それは何も変わりませんでした。スクリーンショットを参照してください - それはEAが買いポジションを開いたことを示している 、価格は下がり、レベル1.2100と1.2200と文に従って位置を横切りました。 。


1.2100と1.2200で買いポジションをオープンする場合 - 彼らは開かなかった。

最初のポジションを手動で開くのか、それとも価格があるレベルを超えた後に、その存在に基づいて、保留中の 注文を出すのか?この方法で試してみてください。
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(SELECT_BY_POS,MODE_TRADES)
      {  if (OrderSymbol()!=Symbol())  continue;
         if (OrderType()==OP_BUYLIMIT) return(0);
}  }  }

if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
         if (OrderType()==OP_BUY)
         {  for (int j=0; j=10-1; j++}
            {  OrderSend (Symbol(),OP_BUYLIMIT,Lot,price[j],10,0,Ask+g*Point,"My order #",11+j);
               Sleep(10*1000);
      }  }  }
}  }
もちろん、保留中の注文が DCによって拒否された場合のエラー処理も必要です。
 
OlegTs:
ordersendの後にreturn演算子をつけて、ティック処理を終了させるべきでは?

ordersendの後にreturn演算子を入れても何も変わりません。


extern double Lot=1;
int g=20; //тейкпрофит
double price[10];   // Заданный уровень 
//-----------------------
int init()
  {
double price[10];   // объявляем массив из 5 элементов           
price[0] = 1.2100; // обращаемся к первому элементу массива и 
                   // присваиваем ему цену. Обратите внимание 
                   // на то, что индекс первого элемента 
                   // начинается с 0. Это важная особенность,
                   // к которой нужно привыкнуть.   
price[1] = 1.2200;  // обращаемся ко второму элементу 
price[2] = 1.2300;  // и так далее 
price[3] = 1.2400; 
price[4] = 1.2500;
price[5] = 1.2600; 
price[6] = 1.2700;  
price[7] = 1.2800; 
price[8] = 1.2900;
price[9] = 1.3000;  
   return(0);
  }
//---------------
int start()
   {
// начало открытия ордеров 
   if (OrdersTotal()>0)return(0);

   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)//проверка наличия откр.поз
   {
   price[0]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",11);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[1]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",12);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[2]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",13);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[3]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",14);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[4]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",15);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[5]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2600,10,0,Ask+g*Point,"My order #",16);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[6]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2700,10,0,Ask+g*Point,"My order #",17);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[7]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2800,10,0,Ask+g*Point,"My order #",18);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[8]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2900,10,0,Ask+g*Point,"My order #",19);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[9]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.3000,10,0,Ask+g*Point,"My order #",20);return;
   }
      return(0);
  }
//+------------------------------------------------------------------+
 
paladin80:
一番最初のポジションを手動で開くのか、それとも価格があるレベルに達したときに保留中の 注文を開き、それに基づいて開くのか? . もちろん、保留中の注文がDCによって拒否された場合のために、より多くのエラーハンドリングが必要です。

価格があるレベルに達した後、注文で定義されたレベルでポジションを建てる場合。

1つのレベルに1つのポジションを持っていることがわかった - 同時に閉じるまで。

 
alex12:

...

同じレベルで1ポーズずつ、電流で閉じるまで。

リスキーな戦略だ、私なら手を出さないね。
 
paladin80:
最初のポジションを手動で開くのか、それとも価格があるレベルを超えた後に保留中の 注文を出すのか?試してみましょう。 あなたの証券会社が保留中の注文を拒否した場合のエラー処理はありません。 。

もちろんヒントコードをありがとうございます、しかし私は非常に良いプログラマーではないので、私はエラーを見つけることができませんでした:'}'.- ひとでなしかっこ

Notepad++であなたのコードを拡大して見てみましたが、エラーを修正できませんでした。

なるほど、TSではなく、コードそのものに興味があるんですね。

エラー'}'が発生します。- アンバランスな括弧

どう直せばいいのかわからない。

extern double Lot=1;
int g=20;          //тейкпрофит
double price[5];   // Заданный уровень 
//-----------------------
int init()
  { 
double price[]={1.2100,1.2200,1.2300,1.2400,1.2500}; // объявляем массив из 5 элементов  
   return(0);
  }
//---------------
int start()
   {
// начало открытия ордеров 
   if (OrdersTotal()>0)return(0);  
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)//проверка наличия откр.поз
   {
   price[0]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",11);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[1]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",12);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[2]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",13);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[3]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",14);return;
   }
   if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==True)//проверка наличия откр.поз
   {
   price[4]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",15);return;
   }
   if (OrdersTotal()>0)
   {  
   for (int i=OrdersTotal()-1;i>=0;i--)
   {  
   if (OrderSelect(SELECT_BY_POS,MODE_TRADES)
   { 
   if (OrderSymbol()!=Symbol()) continue;
         
   if (OrderType()==OP_BUYLIMIT) return(0);
   } 
   }
   }
   if (OrdersTotal()>0)
   { 
   for (i=OrdersTotal()-1;i>=0;i--)
   {  
   if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
   { 
   if (OrderSymbol()!=Symbol()) continue;
   if (OrderType()==OP_BUY)
   {
   for (int j=0;j=5-1;j++}
   { 
   OrderSend (Symbol(),OP_BUYLIMIT,Lot,price[j],10,0,Ask+g*Point,"My order #",11+j);
   Sleep(10*1000);
   } 
   } 
   }
   } 
   }
      return(0);
   }
//+------------------------------------------------------------------+
 

なぜEAがテスト時にポジションを 開かないのか、その理由がわかりません - コードは正しく書いたつもりです。

extern double Lot=1;
//--------------------------------------------------------------------
int g=20; //тейкпрофит
double price[5];   // Заданный уровень 
//--------------------------------------------------------------------
int init()
  { 
double price[]={1.2100,1.2200,1.2300,1.2400,1.2500}; // объявляем массив из 5 элементов  
   return(0);
  }
//---------------
int start()
   {
   double WMA0=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA1=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA2=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA3=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);
   double WMA4=iEnvelopes(NULL,0,1,MODE_SMMA,0,PRICE_WEIGHTED,0.001,MODE_PLUSDI,0);

   // начало открытия ордеров 
   if (OrdersTotal()>0)return(0);// не открывает новые пока не закроются открытые
   
   if (price[0]<WMA0&&price[0]>WMA0) //Buy
   {                           
   price[0]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2100,10,0,Ask+g*Point,"My order #",1);return;
   }
   else
      if (price[1]<WMA1&&price[1]>WMA1) //Buy
   {                           
   price[1]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2200,10,0,Ask+g*Point,"My order #",2);return;
   }
   else
      if (price[2]<WMA2&&price[2]>WMA2) //Buy
   {                           
   price[2]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2300,10,0,Ask+g*Point,"My order #",3);return;
   }
   else
      if (price[3]<WMA3&&price[3]>WMA3) //Buy
   {                           
   price[3]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2400,10,0,Ask+g*Point,"My order #",4);return;
   }
   else
      if (price[4]<WMA4&&price[4]>WMA4) //Buy
   {                           
   price[4]=Ask;
   OrderSend (Symbol(),OP_BUY,Lot,1.2500,10,0,Ask+g*Point,"My order #",5);return;
   }

return(0);
} 
/////////////////////////////////////////////////////////////////////////////////////////
 
alex12:

テスト時にEAがポジションを開けない理由を教えてください。


成行注文(OP_SELLまたはOP_BUY)を発注する場合、最新のBid(売り)またはAsk(買い)の価格のみを開始価格として使用することができます。

というようなものです。

 
alex12:

なぜEAがテスト時にポジションを開かないのか、その理由が分かりません。コードは正しく書かれているようです。


ある値が、同時に他の値より高く、低くなることはあるのでしょうか?

if ( price[0]<WMA0 && price[0]>WMA0 )