[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 750

 
ToLik_SRGV:

その通り、ルスタムはそれをほのめかしていたような気がします

はい、投稿した後に読みました :)
 
皆さんありがとうございます!仕事に戻ります :)
 

なぜグローバル変数があるのかがわからない

#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool
b,s, 
bs,
ss,
bt,
st;
double 
bl,sl;  
//+------------------------------------------------------------------+

注文を出すのに使われる

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
if(bs==1&&bl==1)
{
    NewOrder1(OP_BUYLIMIT,Lot);

Today=TimeDay(TimeCurrent())
;}

return(0);}

//+------------------------------------------------------------------+
int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;
        }
int tic=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
if(tic<0) {Print(GetLastError());
        }else
        {
b=0;s=0;  
bs=0;
ss=0;
bt=0;
st=0;    
bl=0;sl=0; }
return(tic);}

オーダーが0より大きいチケットを持っている場合、この関数は動作するはずです。

else
        {
b=0;s=0; 
bs=0;
ss=0;
bt=0;
st=0;   
bl=0;sl=0; }

これは、グローバル変数の値を すべて0に変更し、新しいオーダーを再び開かないようにするものです。

が、なぜか注文の開始に戻り、新しいティックごとに新しい注文が開かれる。

この不思議な現象の理由は何なのでしょうか?

成行注文の決済時に、ここからグローバル変数が設定される

for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; 
if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*100; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; 
if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*100; break;}
            }
       
         }
      }

また、ここに完全なエキスパートアドバイザーがあります。

ファイル:
test8_2.mq4  7 kb
 
FoxUA:

みんな、助けてくれ、わからないんだ......。


これらの変数に値を入れるブロックはどこにあるのでしょうか?
Expert Advisorの正確なコードを、コンパイルしてテストした形で一通り見てみたいです。
バラバラではなく、この問題はかなり昔からぶら下がっていて、何度も答えが出ているのですが、このバラバラのせいで、誰も問題の全体像を完全に理解することができないのです。

だから、混乱しないように全体像を示してください。

 
ToLik_SRGV:

これらの変数に値を入れるブロックはどこにあるのでしょうか?
あなたのEAの正確なコードを、コンパイルしてテストした形で一通り見てみたいのですが。
バラバラではなく、この問題はかなり昔からぶら下がっていて、何度も答えが出ているのですが、このバラバラのせいで誰も問題の全体像を完全に理解することができないのです。

だから、混乱しないように全体像を示してください。

以下は、全文です。

ファイル:
test8_1.mq4  7 kb
 

を「無料でEAを書きます」スレッドで頼んでも、いつもレスがつかない?

 
diaspar:

を「無料でEAを書きます」スレッドで頼んでも、いつもレスがつかない?

お聞きしたいのですが、あなたはどれくらいの頻度でタダ働きをしているのですか?
それくらいの頻度で対応しています。
 
diaspar:

を「無料でEAを書きます」スレッドで頼んでも、いつもレスがつかない?

このトピックは、トピックスターターによって開始されました。ところが、消化しきれないほど多くの要望が寄せられた。論理的に考えれば、彼は答えるべきだろう。彼は要求する側なのだから。何を期待していたんですか?
 
FoxUA:

私のEAは何が間違っているのかわからない。私はすべてを試してみたが、唯一の結果は、すべてのティックに1 + 1保留中の順序です。唯一のものは、私が別の市場を閉じるときに変数が別のものを開き、すべてのティックで新しいものを開きます。

進行中...

おそらく、このバグはこれらの変数に値を入れるブロック(for ループ内)にあります。私はすでにそこで1つのエラー(OrderSelect()内)を発見しましたが、結果はまだ変わっていません。ブロックのロジックのどこかにバグがあるようです。

追伸:
通常のシンボルケースに変更してください。

 
FoxUA:

バグはもちろん明白で、履歴の負け注文がどこにも行かないので、毎ティックで ポジションを開き、それを見つけて制御変数の値を同じ値で埋め、そして取引の開始のブロックがトリガーされます。