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

 
CloseAllBuy()はOnTick()関数内でif(Bid>buycloseprice) CloseAllBuy()という条件で一箇所だけ呼ばれています。この条件は新しくオンになったときにもオフになったときにも来ていませんが、EAを再びオンにしたときにCloseAllBuy()関数がトリガーされました。
 
rapid_minus:
CloseAllBuy()はOnTick()関数内でif(Bid>buycloseprice) CloseAllBuy()という条件で一箇所だけ呼び出されています。この条件は新しい有効化では発生せず、無効化期間でも発生しませんでしたが、EAを再び有効にするとCloseAllBuy()関数がトリガーされました。
コードはあるのでしょうか?buyclosepriceとは何か、どこから来たのか、何で初期化されたのか、どこで変更されたのか、ここからは分からない...。
 
以下はコードの一部です。
 
SRCが挿入されているかどうか、なぜかわからない。そうでない場合は、テキストで繰り返しますので、お知らせください。
 
Question: この場合、具体的にどのようにグローバル変 数を適用 すればよいのか、アドバイスをお願いします。解らないんです。ありがとうございます。
 
rapid_minus:
以下はコードの一部です。

が表示されない。

rapid_minus さん
質問 この場合、具体的にどのようにグローバル変数を適用 すればよいのか、アドバイスをお願いします。私には理解できない。ありがとうございます。

ドキュメントを読むターミナルのグローバル変数、メタエディタのヘルプを確認する、そちらの方が更新が早いです。

また、重要な変数の設定や値をファイルに保存しておき、読み込み時にそこから読み込むことも可能です。

しかし、ほとんどの場合、このようなことをしなくても、頭を使い、正しいロジックをコードに組み込めばよいのです。

 
テキストで繰り返す。RefreshRates()。
total=OrdersTotal();
if(total>0)
{
for(int i=0; i<=OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && OrderMagicNumber()==magic)
{ RefreshRates();
if(Bid>buycloseprice) CloseAllBuy();
}

if(OrderType()==OP_SELL && OrderMagicNumber()==magic)
{ RefreshRates();
if(Ask<sellcloseprice) CloseAllSell();
}
}
}

if((total==0) || (total>0 && OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol())!=Symbol())
{
Comment("未決済ポジション なし");

if(condition && timeBar!=iTime(Symbol(),Period(),1))
{
Print("Criterion-1 for BAY has appeared");
int poz_1 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_2 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue).Of.Poz_3 = OrderSend(Symbol(),OP_BUY,Lot,Ask,slip,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_3 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000).
RefreshRates();
int poz_4 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_5 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
timeBar=iTime(Symbol(),Period(),1);
double spread = (Ask-Bid);
buyopentime = iTime(Symbol(),Period(),0);
buycloseprice = NormalizeDouble((iOpen(Symbol(),Period(),0)+spread+75*Point),Digits).Buycloseprice = NormalizeDouble((iOpen(Symbol(),Period(),0)+spread+75*Point),Digits);
Comment("Magic 510015 BAY");
Print("CLOSE PRICE = ",buycloseprice);
}.
}

}

//+----------------------------------------------------------------------------+*/
void CloseAllBuy()
{
bool fc;
for (int i=OrdersTotal()-1; i>=0; i--).
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if (OrderType()==OP_BUY)
。{
fc=OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slip);
buycloseprice=0.0;
tc=OrderCloseTime();
}.
}
}
 
では、私のコードのどこに間違いがあるのでしょうか?
 
rapid_minus:
テキストで繰り返す。

buyclosepriceが どこから来るのか、条件の前に何が起こるのか、まだ明確ではありませんif(Bid>buycloseprice) CloseAllBuy();. 私はこれだけを見ているので、後 - buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits); しかし、どこでこのbuyclosepriceが 宣言され、どのように初期化されているのでしょうか?


これが買い注文の 終値のはずだとすると、トリガーされた後に変数に値が渡され、それ以前に何が入っていたのかが示されていないので、ここでロジックが破綻しています。

さて、ちょっとした算数ですが、コードの中にこのようなループがあります。

for(int i=0; i<=OrdersTotal(); i++)

例えば、0から4までの5つのオーダーがあるとします。ループは0から5までカウントされます。このループは正しく動作していますか?

また、if(condition && timeBar!=iTime(Symbol(),Period(),1)) の行で、conditionと timeBarは どこから来ているのでしょうか。

 
私は理解したと思います - エラーは、私はグローバルbuyclosepriceを設定し、すぐにそれに0.0の値を与えることです。そして、その後、ポジションを開く ときに特定の値を取りますが、この値はターミナルのスイッチを切ると失われ、スイッチを入れると元の値、つまり0.0を取り、それぞれif(Bid>buycloseprice)の条件が尊重されてクローズの命令を出します。 しかし、この変数をグローバルターミナルにどのように転送するのか、私は理解しておりません。