コーディングの方法は? - ページ 250

 
mladen:

EAが既存の未決済取引を無視し、未決済のまま、新しい単一取引をオープンしクローズすれば、よりシンプルになるのではないでしょうか。

現在、それはそれ自身の取引を開き、閉じますが、それはまた、追加の既存のオープントレードを閉じます。

 

増加

部分的なコードから、私が提案できることです。NoClosesという ブール値のパラメータを 作成し、そのパラメータをtrueに設定 すると、このスニペット(CBと CSが 1でない場合、コードは注文をクローズしません)のように適用した場合、注文をクローズしないはずです。

よろしくお願いします。

Mladen

increase:
EAが既存の未決済取引を無視する、つまり未決済のままにしておき、自分自身の新しい単一取引を開始・終了すれば、よりシンプルになるのではないでしょうか。
 
mladen:
増加

部分的なコードから、私が提案できることです。NoClosesという ブール値のパラメータを作成し、そのパラメータをtrueに設定 すると、スニペット(CBと CSが 1でない場合、そのコードは注文を閉じない)のように適用した場合、それは注文を閉じないはずです。

について

Mladen

それはそうですが、私が誤解していなければ、EAによって開かれた取引も決して閉じないということで、買いと売りが切り替わるだけなのでしょうか?

 

はい、その通りです。

私の理解では、EAに注文を出させ、あなたが手動で注文を管理(決済)する、というのがあなたの考えだったはずです。このパラメータを falseに戻すと、EAが注文の決済を再開することができます。

increase:
それはそうですが、私が誤解していなければ、EAが開いた取引も閉じることはなく、買いと売りが切り替わるだけだということでしょうか?
 
mladen:
はい、その通りです。私が理解した限りでは、EAに注文を出させ、あなたが手動で注文を管理(決済)する、というのがあなたの考えでした。このパラメータをfalseに戻すと、EAが注文の決済を再開することができます - つまり、「外からコントロールできる」のです。

私は、EAがその注文を開き、閉じ、既存の注文を無視したいので、例えば、次のようになります。

1.5つの売り 注文を開いている

2.EAを適用すると買い注文が1つ開く

3.私は今、5つの売りと1つの買いを持っている

4.EAが売りをトリガーし、買いをクローズします。

5.現在、6つの売り注文(既存の5つの売りとEAの1つの売り)を持っています。

6.EAが買いをトリガーして、その売りをクローズします。

7.現在、5つの売りと1つの買いなどを持っています。

私は既存の売りを閉じます。EAは上記のように自分自身の取引とは別に、他の取引を無視します。

 

増加

Magicparameter を 0 以外の値に設定すると、すでにそうなります(これは、買い注文を決済する直前に決済するかどうかをチェックするコードの一部です)。

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&( (OrderMagicNumber()==Magic)||Magic==0))

つまり、Magic が 0 以外であり、Magic の値が一意である場合、自分自身で開いた注文のみを決済します。

increase:
あ、すみません、あいまいな表現でした、EAに注文を開閉させ、既存の注文を無視させたいのです、例えば

1.5つの売り注文を開いている

2.EAを適用すると、1つの買い注文が開かれる

3.私は今、5つの売りと1つの買いを持っている

4.EAが売りをトリガーし、買いをクローズします。

5.現在、6つの売り注文(既存の5つの売りとEAの1つの売り)を持っています。

6.EAが買いをトリガーして、その売りをクローズします。

7.現在、売りが5枚、買いが1枚など

既存の売りを決済し、EAは上記のように自分自身の取引以外の他の取引を無視します。
 

特定の時間枠でOncePerBarを取引する

こんにちは、親愛なるfEllA's!

私は、テスターでは問題なく動作し、指示通り4H Barごとに複数のトレードを行うEAを持っています(そうでない人はいません)。今、デモ(Alpari UK)で11組のペアでテストしたところ、EAは1回しか取引しません、本来ならもっと(最大3回、指示通り)取引すべきです。条件が揃えば4Hバー毎に取引します。

私は、GlobalVariableをコード化した「Semaphor」関数と、1つの定義済みTimeFrame(この場合は4H)内で複数の注文が開くのを防ぐための次のコード部分を持っています。

//買い

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))。

{

if (SignalsOnly)

{

// ------ 警告は、信号ごとに一度だけ、または15分または30分に一度である必要があります。

if (CheckAlertTime == iTime (NULL, 5, 0)) return(0);

さもなければ CheckAlertTime = iTime (NULL, 5, 0);

if (Alerts) アラート (Symbol() + " + DoubleToStr (Ask, Digits) + " BUY Signal")。

if (PlaySounds) PlaySound (WhichSound)。

}

if (!IsTrade && !SignalsOnly)

{

if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);

else CheckAlertTime = iTime (NULL, OncePerBarTF, 0);

//フリーマージンチェック

if (AccountFreeMargin() < (1000 * Lots))

{

Print ("資金がありません。フリーマージン = ", AccountFreeMargin());

return(0);

}

if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

{

if (MoneyManagement) Lots = NormalizeDouble ((AccountFreeMargin() * Risk / 100 / ((Ask - BuySL) / Point / TickValue)), 2);

else Lots = Lots;

}

if (TradeIsBusy() && IsTradingAllowed() < 0)

return (-1);

RefreshRates();

Ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY " + MagicNo, MagicNo, 0, DodgerBlue).もしも、Ticket > 0なら、(Symbol(), OP_BUY, Lots, Ask, Slimage, StopLossLevel, TakeProfitLevel);

if (チケット > 0)

{

if (オーダーセレクト (Ticket, SELECT_BY_TICKET, MODE_TRADES))

{

Print ("7Qi BUY opened:", OrderOpenPrice());

if (Alerts) Alert (Symbol() + " + DoubleToStr (Ask, Digits) + " BUY opened");

if (PlaySounds) PlaySound (WhichSound)。

}

さもなくば

{

Print ("Error opening BUY: ", Err);

}

}

// TradedThisBar = Bars;

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

TradeIsNotBusy();

return (0);

}

}

//-------------------------------------------------

このコードで可能でしょうか。

if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);

else CheckAlertTime = iTime (NULL, OncePerBarTF, 0);

EAが時間帯の途中で取引するのを防ぐ?それはバーの開始時にのみチェックするのでしょうか?

TradedThisBar = Bars」関数を使用すると、EAを1TimeFrameだけにしなければならないのでは?

Semaphor」関数は、TrailingStopsにも、PartialCloseLotsにもコード化されています。

ありがとうございました。

楽しんでください。

サイモン

スロベニア

 

Iiiiiik - 問題が見つかりました

こんにちは。

問題は、おそらく次のような組み合わせだと思います。

if (TradeIsBusy() /*& IsTradingAllowed()*/ < 0)

return (-1);

//-----------------------------------------------------------------------------------------

int IsTradingAllowed (int MaxWaitingSec = 30)

{

if (!IsTradeAllowed())

{

int StartWaitingTime = GetTickCount();

Print ("Trade context is busy! Wait until it is free...");

if (Alerts) Alert (Symbol() + " EA取引は許可されていません!待機中...");

while (true)

{

if (IsStopped())

{

Print ("EA が終了しました!");

return(-1);

}

if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )

{

Print( "待ち時間の上限を超えました(" + MaxWaitingSec + " 秒)!);

return(-2);

}

if (IsTradeAllowed())

{

Print ("Trade context is now free!");

return(0);

}

スリープ(100)。

}

}

さもなくば

{

Print ("Trade context is free!");

return(1);

}

}

*/

//-----------------------------------------------

int TradeIsBusy (int MaxWaitingSec = 30)

{

if (IsTesting()) return(1);

int Err = 0, StartWaitingTime = GetTickCount()。

while (true)

{

if (IsStopped())

{

Print ("EA was terminated!");

return(-1);

}

if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Print ("待ち時間(" + MaxWaitingSec + " sec) "を超えました!");

if (Alerts) Alert (Symbol() + " EA waiting time exceeded!");

return(-2);

}

if (GlobalVariableCheck ("TradeIsBusy"))

をブレークします。

さもなくば

{

Err = GetLastError()。

if (Err != 0)

{

Print ("TradeIsBusy - GlobalVariableCheck - Error # ", Err);

Sleep (100);

を続けます。

}

if (GlobalVariableSet ("TradeIsBusy", 1.0) > 0) return(1);

さもなくば

{

Err = GetLastError()。

if (Err != 0)

{

Print ("TradeIsBusy - GlobalVariableSet - Error # ", Err);

Sleep(100);

を続けてください。

}

}

}

while (true)

{

if (IsStopped())

{

Print ("EA is terminated!");

return(-1);

}

if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Print ("待ち時間(" + MaxWaitingSec + " sec) "を超えました!");

if (Alerts) Alert (Symbol() + " 待機時間を超えました!");

return (-2);

}

if (GlobalVariableSetOnCondition ("TradeIsBusy", 1.0, 0.0 )) return (1);

さもなくば

{

Err = GetLastError()。

if (Err != 0)

{

Print ("TradeIsBusy - GlobalVariableSetOnCondition - Error # ", Err).Print ("TradeIsBusy - GlobalVariableSetOnCondition - Error #", Err);

を続けてください。

}

if (Alerts) Alert (Symbol() + " - 別のEAが取引を終了するのを待っています...");

Sleep (1000)。

}

//--------------------------------

void TradeIsNotBusy()

{

int Err;

if (IsTesting())

{

return(0);

}

while (true)

{

if (IsStopped())

{

Print (Symbol() + " EAが終了しました!"));

return(-1);

}

if (GlobalVariableSet ("TradeIsBusy", 0.0) > 0) return(1);

さもなくば

{

Err = GetLastError()。

if (Err != 0)

Print ("TradeIsNotBusy - GlobalVariableSet - Error # ", Err);

}

スリープ(100)。

}

}

//-----------------------------------------------------------------------------------------------

IsTradeAllowed関数 なしで試してみます。

とにかくありがとうございます。

楽しんでください。

サイモン

 

エラーコード 130

----- 削除 ----- もう必要ない............。

 

ダウンロード可能なmq4チュートリアル

こんにちは、皆さん。

mq4コードのチュートリアルやリファレンスブックが見つかりません(オンラインではありません!)。

助けていただけますか?

よろしくお願いします。

解決済み:ユーティリティを使用してファイルを解凍する必要がありました。