[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 461 1...454455456457458459460461462463464465466467468...652 新しいコメント asasusa 2011.12.28 06:26 #4601 私の場合、すべての条件を満たしたときにOrderSended 変数がfalseに設定されないのはなぜか教えてください。 int start() { //---- int i; int i2; double MACD; double MACD2 = iCustom(Symbol(),0,"MACD",5,21,1,0,0); double MACD3 = iCustom(Symbol(),0,"MACD",5,21,1,0,1); double MyNull = 0.0; int bar1; int bar2; static bool OrderSended = false; if(MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0) // Вот эти условия { OrderSended = false; } Print("MACD2 = ",MACD2,"MACD3 = ",MACD3,"OrderSended = ",OrderSended); if(MACD2 < 0 && MACD3 > 0 && OrderSended == false) { if(OrderSend(Symbol(),OP_SELL,Lot,Ask,Slippage,Ask + StopLoss * Point,0,OrdersComment,MagicNumber,0,Red) > 0) { OrderSended = true; } } //---- return(0); } ログにMACD2とMACD3が0より大きいと書いてありますが、両方の変数が0より大きいと偽になるはずなのに、OrderSendedはまだ真です。 ilunga 2011.12.28 06:38 #4602 sss2019: 私の場合、すべての条件を満たしたときにOrderSended変数がfalseに設定されないのはなぜか教えてください。 ログにMACD2とMACD3が0より大きいと書いてありますが、両方の変数が0より大きいと偽になるはずなのに、OrderSendedはまだ真です。 if(MACD2 < 0 && MACD3 > 0 で、コード上では、一方が0より大きく、他方が0より小さくなっています。 asasusa 2011.12.28 06:41 #4603 ilunga:であり、コード上では、1が0より大きく、1が0より小さい。 つまり、ポジションを開く ためのシグナルに過ぎず、それは条件がゼロより大きいところです if(MACD2 > 0 && MACD3 > 0 || MACD2 < 0 && MACD3 < 0) // Вот эти условия { OrderSended = false; } ilunga 2011.12.28 07:01 #4604 sss2019: つまり、ポジションを開くためのシグナルに過ぎず、それは条件がゼロより大きいところです しかし、99%の条件は、あなたが望むような順序で計算されないので、ここで括弧を付けるのは良いアイデアです。 if((MACD2 > 0 && MACD3 > 0) || (MACD2 < 0 && MACD3 < 0)) // Вот эти условия asasusa 2011.12.28 07:19 #4605 このデザインでうまくいくか教えてください if(OrdersTotal(MagicNumber)) つまり、もし特定のマジックナンバーを持つワラントがあれば ilunga 2011.12.28 07:30 #4606 sss2019: このデザインでうまくいくか教えてください つまり、もし特定のマジックナンバーを持つワラントがあれば 自分で関数を書いた場合のみ int OrdersTotal(int magic) asasusa 2011.12.28 08:16 #4607 教えてください、forなどの関数を実行した後、この関数は単一の値を返すのでしょうか、それともすべての値を返すのでしょうか?例えば、ループの中で2つの変数に値が代 入された場合、ループは両方の変数の値を返すのか、それとも最後の1つの変数の値だけを返すのか? DOCTORGAD 2011.12.28 08:56 #4608 そこで、私はフラクタルで自分なりに工夫をし、自分でインジケータを書き ました...。まあ、その方が楽なんですけどね。ここで問題が発生しました。 矢印を3小節分後ろに移動させるには?:( ちょっとしたコード... SetIndexStyle(0, DRAW_ARROW,0,1); SetIndexArrow(0,217); SetIndexBuffer(0, ExtMapBuffer1); SetIndexEmptyValue(0, 0.0); SetIndexStyle(1, DRAW_ARROW,0,1); SetIndexArrow(1, 218); SetIndexBuffer(1, ExtMapBuffer2); SetIndexEmptyValue(1, 0.0); IndicatorShortName("My_iFractals"); SetIndexLabel(0, "iFractalsUp"); SetIndexLabel(1, "iFractalsDn"); UPD Вопрос снят, сорри опять за кривость свою, но может кому будет интересно ответ- SetIndexShift(0,-3); [ARCHIVE] Any rookie question, MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 コーディングのヘルプ ilunga 2011.12.28 09:02 #4609 sss2019: でも教えてください、forなどの関数が実行された後、この関数は単一の値を返すのでしょうか、それともすべての値を返すのでしょうか?例えば、ループの中で2つの変数に値が代入された場合、ループは両方の変数の値を返すのでしょうか、それとも最後の1つだけを返すのでしょうか? なんということでしょう・・・。 1) for は関数ではなく、ループ演算子です。 2) 関数は return で返すように指示されたものだけを返す。 3) 変数はループと緩やかに関係している。ループで10個まで変更可能 削除済み 2011.12.28 09:28 #4610 みんな、何が悪いのか、オーダークローズで何が起こっているのか、はっきりしないんだ。 このような場合は、問題なく動作します。 double PriceBid = Bid; double PriceAsk = Ask; PrevPriceBid = PriceBid; PrevPriceAsk = PriceAsk; double be = GetWeightedBELevel(); if(be != -1) { double BuyLots = GetBuyLotsSum(); double SellLots = GetSellLotsSum(); double Swap = GetSwap(); //string str = be + " "; if(Swap < 0) { double diff = BuyLots - SellLots; //str = str + MarketInfo(Symbol(), MODE_TICKVALUE) * diff + " " + (-Swap / (MarketInfo(Symbol(), MODE_TICKVALUE) * diff) * Point) + " "; be += ND(-Swap / (MarketInfo(Symbol(), MODE_TICKVALUE) * diff) * Point + diff / MathAbs(diff) * 1 * Point); } //str = str + Swap + " " + be; //Comment(str); if((BuyLots > SellLots && ND(PrevPriceBid) < ND(be + (TakeProfitBuy) * Point) && ND(PriceBid) >= ND(be + (TakeProfitBuy) * Point)) || (BuyLots < SellLots && ND(PrevPriceAsk) > ND(be - (TakeProfitSell) * Point) && ND(PriceAsk) <= ND(be - (TakeProfitSell) * Point))) { CloseAllBuy(); CloseAllSell(); } } ObjectDelete("ZeroBuy"); if(BuyLots > SellLots) {double ZeroBuy = ND(be + TakeProfitBuy * Point); ObjectCreate("ZeroBuy",OBJ_ARROW,0,Time[0],ZeroBuy,0,0,0,0); ObjectSet ("ZeroBuy",OBJPROP_ARROWCODE,6); ObjectSet ("ZeroBuy",OBJPROP_COLOR, Olive);} ObjectDelete("ZeroSell"); if(BuyLots < SellLots) {double ZeroSell = ND(be - TakeProfitSell * Point); ObjectCreate("ZeroSell",OBJ_ARROW,0,Time[0],ZeroSell,0,0,0,0); ObjectSet ("ZeroSell",OBJPROP_ARROWCODE,6); ObjectSet ("ZeroSell",OBJPROP_COLOR, Olive);} //--------------------- 私はこのコードを一番上のコードの下に追加しています。 //+X================================================================X+X+ int b,s; double price,price_b,price_s,lot,lot_s,lot_b,SLb,SLs,SLbTwo,SLsTwo; // for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderSymbol()==Symbol()) { price = OrderOpenPrice(); lot = OrderLots(); if (OrderType()==OP_BUY ) {price_b = price_b+price*lot; b++; lot_b=lot_b+lot;} if (OrderType()==OP_SELL) {price_s = price_s+price*lot; s++; lot_s=lot_s+lot;} } } } ObjectDelete("SLb"); if (b!=0) { SLb = (price_b/lot_b)+TakeProfitBuy * Point; ObjectCreate("SLb",OBJ_ARROW,0,Time[0],SLb,0,0,0,0); ObjectSet ("SLb",OBJPROP_ARROWCODE,6); ObjectSet ("SLb",OBJPROP_COLOR, Navy); } ObjectDelete("SLbTwo"); if (b!=0) { SLbTwo = (price_b/lot_b)+TakeProfitBuyTwo * Point; ObjectCreate("SLbTwo",OBJ_ARROW,0,Time[0],SLbTwo,0,0,0,0); ObjectSet ("SLbTwo",OBJPROP_ARROWCODE,6); ObjectSet ("SLbTwo",OBJPROP_COLOR, Navy); } ObjectDelete("SLs"); if (s!=0) { SLs = (price_s/lot_s)-TakeProfitSell * Point; ObjectCreate("SLs",OBJ_ARROW,0,Time[0],SLs,0,0,0,0); ObjectSet ("SLs",OBJPROP_ARROWCODE,6); ObjectSet ("SLs",OBJPROP_COLOR, Maroon); } ObjectDelete("SLsTwo"); if (s!=0) { SLsTwo = (price_s/lot_s)-TakeProfitSellTwo * Point; ObjectCreate("SLsTwo",OBJ_ARROW,0,Time[0],SLsTwo,0,0,0,0); ObjectSet ("SLsTwo",OBJPROP_ARROWCODE,6); ObjectSet ("SLsTwo",OBJPROP_COLOR, Maroon); } if ((totalBuy > 1) && (SLb > Ask) && (SLbTwo < Ask) && (DnM15 > Bid)) // { CloseAllBuy(); } if ((totalSell > 1) && (SLs < Bid) && (SLsTwo > Bid) && (UpM15 < Ask)) // { CloseAllSell(); } //--------------------------------- の後、最初の関数が動作せず、注文を閉じることができません。ログにエラーは出ていないのですが。そこを間違えてしまったのですが、なぜですか? 両機能の下にあるすべてのオブジェクトを移動させ、動作しています。 疑問は解決しました! 1...454455456457458459460461462463464465466467468...652 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私の場合、すべての条件を満たしたときにOrderSended 変数がfalseに設定されないのはなぜか教えてください。
ログにMACD2とMACD3が0より大きいと書いてありますが、両方の変数が0より大きいと偽になるはずなのに、OrderSendedはまだ真です。
私の場合、すべての条件を満たしたときにOrderSended変数がfalseに設定されないのはなぜか教えてください。
ログにMACD2とMACD3が0より大きいと書いてありますが、両方の変数が0より大きいと偽になるはずなのに、OrderSendedはまだ真です。
で、コード上では、一方が0より大きく、他方が0より小さくなっています。
であり、コード上では、1が0より大きく、1が0より小さい。
つまり、ポジションを開く ためのシグナルに過ぎず、それは条件がゼロより大きいところです
つまり、ポジションを開くためのシグナルに過ぎず、それは条件がゼロより大きいところです
しかし、99%の条件は、あなたが望むような順序で計算されないので、ここで括弧を付けるのは良いアイデアです。
このデザインでうまくいくか教えてください
つまり、もし特定のマジックナンバーを持つワラントがあれば
このデザインでうまくいくか教えてください
つまり、もし特定のマジックナンバーを持つワラントがあれば
int OrdersTotal(int magic)
そこで、私はフラクタルで自分なりに工夫をし、自分でインジケータを書き ました...。まあ、その方が楽なんですけどね。ここで問題が発生しました。
矢印を3小節分後ろに移動させるには?:(
ちょっとしたコード...
SetIndexStyle(0, DRAW_ARROW,0,1);
SetIndexArrow(0,217);
SetIndexBuffer(0, ExtMapBuffer1);
SetIndexEmptyValue(0, 0.0);
SetIndexStyle(1, DRAW_ARROW,0,1);
SetIndexArrow(1, 218);
SetIndexBuffer(1, ExtMapBuffer2);
SetIndexEmptyValue(1, 0.0);
IndicatorShortName("My_iFractals");
SetIndexLabel(0, "iFractalsUp");
SetIndexLabel(1, "iFractalsDn");
UPD
Вопрос снят, сорри опять за кривость свою, но может кому будет интересно ответ- SetIndexShift(0,-3);
でも教えてください、forなどの関数が実行された後、この関数は単一の値を返すのでしょうか、それともすべての値を返すのでしょうか?例えば、ループの中で2つの変数に値が代入された場合、ループは両方の変数の値を返すのでしょうか、それとも最後の1つだけを返すのでしょうか?
なんということでしょう・・・。
1) for は関数ではなく、ループ演算子です。
2) 関数は return で返すように指示されたものだけを返す。
3) 変数はループと緩やかに関係している。ループで10個まで変更可能
みんな、何が悪いのか、オーダークローズで何が起こっているのか、はっきりしないんだ。
このような場合は、問題なく動作します。
私はこのコードを一番上のコードの下に追加しています。
の後、最初の関数が動作せず、注文を閉じることができません。ログにエラーは出ていないのですが。そこを間違えてしまったのですが、なぜですか?
両機能の下にあるすべてのオブジェクトを移動させ、動作しています。 疑問は解決しました!