EAコードではほとんど役に立たない
Results 1 to 4 of 4

Thread: EAコードではほとんど役に立たない

  1. #1
    以下は私が使用するシステム用のEAを構築するためのテンプレートとして使用しているEAです。私は経験豊富なプログラマーではなく、このプロジェクトでmql4についての知識を身につけることができると願っています。以下のコードはうまくいきますが、私は1つの小さな部分にこだわっています。このEAは現在、一度に1つの取引をオープンしています。私は同時取引を可能にしたいと思います。誰かがコードをすばやく見て、どの部分がこれを制限しているかを教えてください。私はそれがチェックポジションセクションであると信じています。どうもありがとう。


    Quote Originally Posted by ;
    #define SIGNAL_NONE 0
    #define SIGNAL_BUY 1
    #define SIGNAL_SELL 2
    #define SIGNAL_CLOSEBUY 3
    #define SIGNAL_CLOSESELL 4
    extern int MagicNumber = 0;
    extern bool SignalMail = False;
    extern bool EachTickMode = False;
    extern double Lots = 1.0;
    extern intスリッパ= 3;
    extern bool UseStopLoss = False;
    extern int StopLoss = 30;
    extern bool UseTakeProfit = False;
    extern int TakeProfit = 60;
    extern bool UseTrailingStop = False;
    extern int TrailingStop = 30;
    int BarCount;
    int現在の;
    bool TickCheck = False;
    // ----------------------------------------------- -------------------
    //|エキスパート初期化関数|
    // ----------------------------------------------- -------------------
    int init(){
    BarCount =バー;
    if(EachTickMode)Current = 0;それ以外の場合はCurrent = 1;
    return(0);
    }
    // ----------------------------------------------- -------------------
    //|エキスパート初期化機能|
    // ----------------------------------------------- -------------------
    int deinit(){
    return(0);
    }
    // ----------------------------------------------- -------------------
    //|エキスパートスタート機能|
    // ----------------------------------------------- -------------------
    int start(){
    int Order = SIGNAL_NONE;
    合計、チケット;
    double StopLossLevel、TakeProfitLevel;

    if(EachTickMode Bars!= BarCount)TickCheck = False;
    合計= OrdersTotal();
    注文= SIGNAL_NONE;
    // ----------------------------------------------- -------------------
    //|変数の開始|
    // ----------------------------------------------- -------------------

    Double Buy1_1 = iOpen(NULL、PERIOD_H4、Current 0);
    Double Buy1_2 = iCustom(NULL、PERIOD_H4、AndrewFX HiLo、0、Current 0);
    ダブルSell1_1 = iOpen(NULL、PERIOD_H4、Current 0);
    ダブルSell1_2 = iCustom(NULL、PERIOD_H4、AndrewFX HiLo、0、Current 0);
    double CloseBuy1_1 = iOpen(NULL、PERIOD_H4、Current 0);
    double CloseBuy1_2 = iCustom(NULL、PERIOD_H4、AndrewFX HiLo、0、Current 0);
    ダブルCloseSell1_1 = iOpen(NULL、PERIOD_H4、現在 0);
    ダブルCloseSell1_2 = iCustom(NULL、PERIOD_H4、AndrewFX HiLo、0、Current 0);

    // ----------------------------------------------- -------------------
    //|可変エンド|
    // ----------------------------------------------- -------------------
    //位置を確認する
    bool IsTrade = False;
    for(int i = 0; i lt; Total; i ){
    OrderSelect(i、SELECT_BY_POS、MODE_TRADES);
    if(OrderType()lt; = OP_SELL OrderSymbol()== Symbol()){
    IsTrade = True;
    if(OrderType()== OP_BUY){
    //閉じる
    // ----------------------------------------------- -------------------
    //|シグナルの開始(Exit Buy)|
    // ----------------------------------------------- -------------------
    if(CloseBuy1_1 lt; CloseBuy1_2)Order = SIGNAL_CLOSEBUY;

    // ----------------------------------------------- -------------------
    //|シグナルエンド(終了購入)|
    // ----------------------------------------------- -------------------
    if(Order == SIGNAL_CLOSEBUY(EachTickMode!TickCheck)||(!EachTickMode(Bars!= BarCount))))){}
    OrderClose(OrderTicket()、OrderLots()、Bid、Slippage、MediumSeaGreen);
    if(SignalMail)SendMail([Signal Alert]、[ Symbol() ] DoubleToStr(Bid、Digits) Close Buy);
    if(!EachTickMode)BarCount =バー;
    IsTrade = False;
    持続する;
    }
    //トレーリングストップ
    if(UseTrailingStop TrailingStop gt; 0){
    if(Bid - OrderOpenPrice()gt; Point * TrailingStop){
    if(OrderStopLoss()lt; Bid - Point * TrailingStop){
    OrderModify(OrderTicket()、OrderOpenPrice()、Bid-Point * TrailingStop、OrderTakeProfit()、0、MediumSeaGreen);
    if(!EachTickMode)BarCount =バー;
    持続する;
    }
    }
    }
    } else {
    //閉じる
    // ----------------------------------------------- -------------------
    //|シグナル開始(出口売却)|
    // ----------------------------------------------- -------------------
    if(CloseSell1_1 gt; CloseSell1_2)Order = SIGNAL_CLOSESELL;

    // ----------------------------------------------- -------------------
    //|シグナルエンド(売り出し終了)|
    // ----------------------------------------------- -------------------
    if(Order == SIGNAL_CLOSESELL(EachTickMode!TickCheck)||(!EachTickMode(Bars!= BarCount))))){
    OrderClose(OrderTicket()、OrderLots()、Ask、Slippage、DarkOrange);
    if(SignalMail)SendMail([Signal Alert]、[ Symbol() ] DoubleToStr(Ask、Digits) Close Sell);
    if(!EachTickMode)BarCount =バー;
    IsTrade = False;
    持続する;
    }
    //トレーリングストップ
    if(UseTrailingStop TrailingStop gt; 0){
    if((OrderOpenPrice() - Ask)gt;(Point * TrailingStop)){
    if((OrderStopLoss()gt;(Ask Point * TrailingStop))||(OrderStopLoss()== 0)){
    OrderModify(OrderTicket()、OrderOpenPrice()、Ask Point * TrailingStop、OrderTakeProfit()、0、DarkOrange);
    if(!EachTickMode)BarCount =バー;
    持続する;
    }
    }
    }
    }
    }
    }
    // ----------------------------------------------- -------------------
    //|信号の開始(エントリ)|
    // ----------------------------------------------- -------------------
    if(Buy1_1 gt; Buy1_2)Order = SIGNAL_BUY;
    if(Sell1_1 lt; Sell1_2)Order = SIGNAL_SELL;

    // ----------------------------------------------- -------------------
    //|シグナルエンド|
    // ----------------------------------------------- -------------------
    //購入
    if(Order == SIGNAL_BUY(EachTickMode!TickCheck)||(!EachTickMode(Bars!= BarCount))))){
    if(!IsTrade){
    //余白を確認する
    if(AccountFreeMargin()lt;(1000 * Lots)){
    印刷(私たちはお金はありません。無料余白=、AccountFreeMargin());
    return(0);
    }
    if(UseStopLoss)StopLossLevel = Ask - StopLoss * Point;そうでなければStopLossLevel = 0.0;
    もし(UseTakeProfit)TakeProfitLevel = Ask TakeProfit * Point;そうでなければTakeProfitLevel = 0.0;
    Ticket = OrderSend(Symbol()、OP_BUY、Lots、Ask、Slippage、StopLossLevel、TakeProfitLevel、Buy(# MagicNumber )、MagicNumber、0、DodgerBlue);
    if(Ticket gt; 0){
    if(OrderSelect(Ticket、SELECT_BY_TICKET、MODE_TRADES)){
    印刷(注文は開封しました:、OrderOpenPrice());
    if(SignalMail)SendMail([Signal Alert]、[ Symbol() ] DoubleToStr(Ask、Digits) Open Buy);
    } else {
    印刷(注文の開始エラー:GetLastError());
    }
    }
    if(EachTickMode)TickCheck = True;
    if(!EachTickMode)BarCount =バー;
    return(0);
    }
    }
    //売る
    if(Order == SIGNAL_SELL(EachTickMode!TickCheck)||(!EachTickMode(Bars!= BarCount))))){
    if(!IsTrade){
    //余白を確認する
    if(AccountFreeMargin()lt;(1000 * Lots)){
    印刷(私たちはお金はありません。無料余白=、AccountFreeMargin());
    return(0);
    }
    if(UseStopLoss)StopLossLevel = Bid StopLoss * Point;そうでなければStopLossLevel = 0.0;
    もし(UseTakeProfit)TakeProfitLevel = Bid - TakeProfit * Point;そうでなければTakeProfitLevel = 0.0;
    Ticket = OrderSend(Symbol()、OP_SELL、Lots、Bid、Slippage、StopLossLevel、TakeProfitLevel、Sell(# MagicNumber )、MagicNumber、0、DeepPink);
    if(Ticket gt; 0){
    if(OrderSelect(Ticket、SELECT_BY_TICKET、MODE_TRADES)){
    印刷(売り注文が開かれました:、OrderOpenPrice());
    if(SignalMail)SendMail([Signal Alert]、[ Symbol() ] DoubleToStr(Bid、Digits) Open Sell);
    } else {
    印刷(売り注文エラー:、GetLastError());
    }
    }
    if(EachTickMode)TickCheck = True;
    if(!EachTickMode)BarCount =バー;
    return(0);
    }
    }
    if(!EachTickMode)BarCount =バー;
    return(0);
    }
    // ----------------------------------------------- -------------------
    Quote Originally Posted by ;
    #define SIGNAL_NONE 0
    #define SIGNAL_BUY 1
    #define SIGNAL_SELL 2
    #define SIGNAL_CLOSEBUY 3
    #define SIGNAL_CLOSESELL 4
    extern int MagicNumber = 0;
    extern bool SignalMail = False;
    extern bool EachTickMode = False;
    extern double Lots = 1.0;
    extern intスリッパ= 3;
    extern bool UseStopLoss = False;
    extern int StopLoss = 30;
    extern bool UseTakeProfit = False;
    extern int TakeProfit = 60;
    extern bool UseTrailingStop = False;
    extern int TrailingStop = 30;
    int BarCount;
    int現在の;
    bool TickCheck = False;
    // ----------------------------------------------- -------------------
    //|エキスパート初期化関数|
    // ----------------------------------------------- -------------------
    int init(){
    BarCount =バー;
    if(EachTickMode)Current = 0;それ以外の場合はCurrent = 1;
    return(0);
    }
    // ----------------------------------------------- -------------------
    //|エキスパート初期化機能|
    // ----------------------------------------------- -------------------
    int deinit(){
    return(0);
    }
    // ----------------------------------------------- -------------------
    //|エキスパートスタート機能|
    // ----------------------------------------------- -------------------
    int start(){
    int Order = SIGNAL_NONE;
    合計、チケット;
    double StopLossLevel、TakeProfitLevel;

    if(EachTickMode Bars!= BarCount)TickCheck = False;
    合計= OrdersTotal();
    注文= SIGNAL_NONE;
    // ----------------------------------------------- -------------------
    //|変数の開始|
    // ----------------------------------------------- -------------------

    Double Buy1_1 = iOpen(NULL、PERIOD_H4、Current 0);
    Double Buy1_2 = iCustom(NULL、PERIOD_H4、AndrewFX HiLo、0、Current 0);
    ダブルSell1_1 = iOpen(NULL、PERIOD_H4、Current 0);
    ダブルSell1_2 = iCustom(NULL、PERIOD_H4、AndrewFX HiLo、0、Current 0);
    double CloseBuy1_1 = iOpen(NULL、PERIOD_H4、Current 0);
    double CloseBuy1_2 = iCustom(NULL、PERIOD_H4、AndrewFX HiLo、0、Current 0);
    ダブルCloseSell1_1 = iOpen(NULL、PERIOD_H4、現在 0);
    ダブルCloseSell1_2 = iCustom(NULL、PERIOD_H4、AndrewFX HiLo、0、Current 0);

    // ----------------------------------------------- -------------------
    //|可変エンド|
    // ----------------------------------------------- -------------------
    //位置を確認する
    bool IsTrade = False;
    for(int i = 0; i lt; Total; i ){
    OrderSelect(i、SELECT_BY_POS、MODE_TRADES);
    if(OrderType()lt; = OP_SELL OrderSymbol()== Symbol()){
    IsTrade = True;
    if(OrderType()== OP_BUY){
    //閉じる
    // ----------------------------------------------- -------------------
    //|シグナルの開始(Exit Buy)|
    // ----------------------------------------------- -------------------
    if(CloseBuy1_1 lt; CloseBuy1_2)Order = SIGNAL_CLOSEBUY;

    // ----------------------------------------------- -------------------
    //|シグナルエンド(終了購入)|
    // ----------------------------------------------- -------------------
    if(Order == SIGNAL_CLOSEBUY(EachTickMode!TickCheck)||(!EachTickMode(Bars!= BarCount))))){}
    OrderClose(OrderTicket()、OrderLots()、Bid、Slippage、MediumSeaGreen);
    if(SignalMail)SendMail([Signal Alert]、[ Symbol() ] DoubleToStr(Bid、Digits) Close Buy);
    if(!EachTickMode)BarCount =バー;
    IsTrade = False;
    持続する;
    }
    //トレーリングストップ
    if(UseTrailingStop TrailingStop gt; 0){
    if(Bid - OrderOpenPrice()gt; Point * TrailingStop){
    if(OrderStopLoss()lt; Bid - Point * TrailingStop){
    OrderModify(OrderTicket()、OrderOpenPrice()、Bid-Point * TrailingStop、OrderTakeProfit()、0、MediumSeaGreen);
    if(!EachTickMode)BarCount =バー;
    持続する;
    }
    }
    }
    } else {
    //閉じる
    // ----------------------------------------------- -------------------
    //|シグナル開始(出口売却)|
    // ----------------------------------------------- -------------------
    if(CloseSell1_1 gt; CloseSell1_2)Order = SIGNAL_CLOSESELL;

    // ----------------------------------------------- -------------------
    //|シグナルエンド(売り出し終了)|
    // ----------------------------------------------- -------------------
    if(Order == SIGNAL_CLOSESELL(EachTickMode!TickCheck)||(!EachTickMode(Bars!= BarCount))))){
    OrderClose(OrderTicket()、OrderLots()、Ask、Slippage、DarkOrange);
    if(SignalMail)SendMail([Signal Alert]、[ Symbol() ] DoubleToStr(Ask、Digits) Close Sell);
    if(!EachTickMode)BarCount =バー;
    IsTrade = False;
    持続する;
    }
    //トレーリングストップ
    if(UseTrailingStop TrailingStop gt; 0){
    if((OrderOpenPrice() - Ask)gt;(Point * TrailingStop)){
    if((OrderStopLoss()gt;(Ask Point * TrailingStop))||(OrderStopLoss()== 0)){
    OrderModify(OrderTicket()、OrderOpenPrice()、Ask Point * TrailingStop、OrderTakeProfit()、0、DarkOrange);
    if(!EachTickMode)BarCount =バー;
    持続する;
    }
    }
    }
    }
    }
    }
    // ----------------------------------------------- -------------------
    //|信号の開始(エントリ)|
    // ----------------------------------------------- -------------------
    if(Buy1_1 gt; Buy1_2)Order = SIGNAL_BUY;
    if(Sell1_1 lt; Sell1_2)Order = SIGNAL_SELL;

    // ----------------------------------------------- -------------------
    //|シグナルエンド|
    // ----------------------------------------------- -------------------
    //購入
    if(Order == SIGNAL_BUY(EachTickMode!TickCheck)||(!EachTickMode(Bars!= BarCount))))){
    if(!IsTrade){
    //余白を確認する
    if(AccountFreeMargin()lt;(1000 * Lots)){
    印刷(私たちはお金はありません。無料余白=、AccountFreeMargin());
    return(0);
    }
    if(UseStopLoss)StopLossLevel = Ask - StopLoss * Point;そうでなければStopLossLevel = 0.0;
    もし(UseTakeProfit)TakeProfitLevel = Ask TakeProfit * Point;そうでなければTakeProfitLevel = 0.0;
    Ticket = OrderSend(Symbol()、OP_BUY、Lots、Ask、Slippage、StopLossLevel、TakeProfitLevel、Buy(# MagicNumber )、MagicNumber、0、DodgerBlue);
    if(Ticket gt; 0){
    if(OrderSelect(Ticket、SELECT_BY_TICKET、MODE_TRADES)){
    印刷(注文は開封しました:、OrderOpenPrice());
    if(SignalMail)SendMail([Signal Alert]、[ Symbol() ] DoubleToStr(Ask、Digits) Open Buy);
    } else {
    印刷(注文の開始エラー:GetLastError());
    }
    }
    if(EachTickMode)TickCheck = True;
    if(!EachTickMode)BarCount =バー;
    return(0);
    }
    }
    //売る
    if(Order == SIGNAL_SELL(EachTickMode!TickCheck)||(!EachTickMode(Bars!= BarCount))))){
    if(!IsTrade){
    //余白を確認する
    if(AccountFreeMargin()lt;(1000 * Lots)){
    印刷(私たちはお金はありません。無料余白=、AccountFreeMargin());
    return(0);
    }
    if(UseStopLoss)StopLossLevel = Bid StopLoss * Point;そうでなければStopLossLevel = 0.0;
    もし(UseTakeProfit)TakeProfitLevel = Bid - TakeProfit * Point;そうでなければTakeProfitLevel = 0.0;
    Ticket = OrderSend(Symbol()、OP_SELL、Lots、Bid、Slippage、StopLossLevel、TakeProfitLevel、Sell(# MagicNumber )、MagicNumber、0、DeepPink);
    if(Ticket gt; 0){
    if(OrderSelect(Ticket、SELECT_BY_TICKET、MODE_TRADES)){
    印刷(売り注文が開かれました:、OrderOpenPrice());
    if(SignalMail)SendMail([Signal Alert]、[ Symbol() ] DoubleToStr(Bid、Digits) Open Sell);
    } else {
    印刷(売り注文エラー:、GetLastError());
    }
    }
    if(EachTickMode)TickCheck = True;
    if(!EachTickMode)BarCount =バー;
    return(0);
    }
    }
    if(!EachTickMode)BarCount =バー;
    return(0);
    }
    // ----------------------------------------------- -------------------

  2. #2
    あなたのコードは読みにくいです!関連する部分をインデントし、おそらく何が起きているのかを理解するために、たくさんの行を読む必要がないように、関数に部分を入れてみてください。一見すると、IsTrade = Trueを設定している可能性があります。したがって、もう一つの貿易は許されていない

  3. #3
    うん、これはEAのビルダーコードです...私はEAを構築するために別のテンプレートを使用することをお勧めしますが、これを主張するならば、IsTrade変数を混乱させる必要があります。本質的には、それを二重変数に変更し、すべてのOrderSendに取引回数 1を加算させます。したがって、注文する前に、取引数が特定のMaxTrades変数よりも少ないことを確認してください。そんな感じ。

  4. #4
    添付ファイルHi jcalow、私は2つの新しい変数を追加しました。 extern bool UseIsTrade = false; extern int Maxtrades = 5; UseIsTrade:これをfalseに設定すると、すべてのIsTrade変数宣言およびその値の変更が無視されます。真に設定されているときは、反対になります。 Maxtrades:これはカウンターチェック変数です。基本的には、売買取引であるかどうかにかかわらず、EAによって開かれたオープン取引の数をカウントします。これはあなたのEAが設定したMagic Numberを介して行われます。取引が対応する通貨ペアで開かれているかどうかもチェックします。オープントレードの数が最大数より多いか等しい場合それがEAにそれ以上の新しい取引を開かせることはできません。要するにMaxtradesに5の値を設定すると、既に5つのオープン取引がある場合、EAは新しい取引を開こうとしません。
    https://www.forexgroove.com/attachme...3665102391.mq4

投稿権限

  • Youma新しいスレッドを投稿しない
  • Youmaは返信しない
  • あなたは添付ファイルを投稿しないかもしれない
  • Youma Notedityourposts
  •  
  • スマイリーはオンです
  • スマイリーはオンです
  • [IMG]コードがオンです
  • [VIDEO]コードがオンです
  • HTMLコードがオフです
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.