[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 367

 
lottamer:


このモディファイアは私が書いたものではありません。

図書館から用意しました。

だから私も掃除ができないんです。

しかし、なぜ中のパラメータが最適化されないのか、それが問題なのです......。

基本的な間違いはありません!

残りのコードは動作します。

アルゴリズムに任意の条件を付ける。

- 買う

-モディファイ

- 了い

---------------------------

で、注文変更内のパラメータを最適化しようとする - すなわち、ストップとテーク

まあ、動けばいいし、さらに言えば100%なら問題ないんですけどね。なぜ、その中に間違いを探さなければならないのか。- つまり、問題ないのです!- そして、エラーを探すということは、100%の確信がないということです。つまり、問題はコードにあるのではなく、評価基準にあるわけで、それらもあなたを混乱させるからです。(あなたが始めたことです : )) それに油を注いでいるだけです......)

ここに紹介されているものは、どう呼べばいいのかさえわからない・・・。おそらく - 関数のサイズに肥大化した単一のアクション。多くのプログラムでは、このようなアプリケーションは最適ではありません。あるブロックの修正は、他の何かと一緒になってしまいます。- ただし、適用条件が異なる場合があります。しかし、私が言いたいのは、ここで最適化することは何もないということです...。あくまで行動であるため。

 
lottamer:

見てください。

今、すべてを元に戻すと、つまり、外部のSTOPとTAKEパラメータを削除し、それらの代わりに関数内に数字を書き込むと、EAは10週間毎週実行され、明確な結果を示しているのです。

そして、もし私が手動でストップとテイクアウェイのパラメータを変更したら - すべてが機能し、わずかに異なる結果を与えるでしょう(もちろん)。

では、なぜ、これらのパラメータをモディファイアの外に持っていくと、オプティマイザーはそれを重要でないとみなすのでしょうか?

それこそ、問題はこの関数ではなく、別のところにある可能性が高いということをお伝えしたいのです。だから、何か別のものが混ざっているんですね。もしかしたら、このSLとTPは、どこか他の場所で重なって適用されているのかもしれませんし、別の何かかもしれません。推測するしかない。- そのため、コード全体を見る必要があるのです。そして、誰も盲目的にあなたを助けることはできません。- ここには魔法使いはいません。

ほら、質問しておきながら、理由を知るために必要な情報をすべて伝えない(ノウハウを合理的に隠す)。- プラグの例のように。- でも、この場合、どうしたらいいのでしょうか?- 答えは、「できない」です。すべてのヘルプは意味がない。そして、エネルギーも必要です。

 
Chiripaha:

まあ、うまくいけば、しかも100%なら問題はないんですけどね。では、なぜその中からエラーを探さなければならないのでしょうか?- だから、問題はそこにあるのではないのです- エラーで検索しているということは、100%の確信がないことを意味します。つまり、問題はコードにあるのではなく、評価基準にあるわけで、それらもあなたを混乱させるからです。(あなたが始めたことです : )) それに油を注いでいるだけです......)

ここに紹介されているものは、どう呼べばいいのかさえわからない・・・。おそらく - 関数のサイズに肥大化した単一のアクション。ほとんどのプログラムでは、このようなアプリケーションは最適ではありません。あるブロックの修正は、他の何かと一緒になってしまいます。- ただし、適用条件が異なる場合があります。しかし、私が言いたいのは、ここで最適化することは何もないということです...。あくまで行動であるため。

ONLYで変更したのと、最適化できるパラメータがあるため、その中を覗いています。

ストップ&テイクサイズは最適化されています。

 
Chiripaha:

それこそ、問題はこの関数ではなく、別のところにあるのだろうということを伝えたいのです。だから、あなたは何か別のことを勘違いしているのです。もしかしたら、これらのSLやTPは、何らかの形で重なる他の場所で適用されているのかもしれませんし...。推測するしかない。- そのため、コード全体を見る必要があるのです。そして、誰も盲目的にあなたを助けることはできません。- 魔法使いはいない。

ほら、質問しているのに、原因を特定するために必要な情報の一部を省いてしまう(感覚的にノウハウを隠してしまう)んですね。- inludesの例と同様です。- でも、この場合、どうしたらいいのでしょうか?- 答えは、「できない」です。すべてのヘルプは意味がない。そして、エネルギーも必要です。

わかりました...。

一息ついて...考えよう...

見る

そして、その場所がわかった気がする...

 
lottamer:

ONLYで変更したのと、最適化できるパラメータがあるため、その中を覗いています。

ストップ&テイクサイズは最適化されています。

:))))))何のために最適化されているのか、注文の修正?- 今の話とは違いますね。

プログラム、その条件との関係で最適化されるべきです - あなたが確実に隠しているもの。しかし、1つの行動に対して最適化することはできません。

この場合、開発者はこれらの点を自分で決めればよいのです。みんな経験するんだ、信じてくれ。: ))私や他の同僚もそうです。助けを求めても隠れることはできない。そして、自分のカードを公開する--この場合は、フォーラムが公開されているので、一切公開しない--必要があるのです。
 
Chiripaha:

:))))))どのように最適化されているのか?- 今の話とは違いますね。

プログラム、その条件に関連して最適化されるべきです - あなたは確実に隠している。しかし、1つの行動に対して最適化することはできません。

この場合、開発者はこれらの点を自分で決めればよいのです。みんな経験するんだ、信じてくれ。: ))私や他の同僚もそうです。助けを求めても、隠してもダメなんです。それから、自分のカードを公開すること--この場合は、フォーラムが公開されているので、まったく公開しないこと--です。

これからすべてのコードを用意して、お見せします......。
 

以下はそのコードです。

EURUSD ペア

//+------------------------------------------------------------------+
//|                                                           33.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <WinUser32.mqh>
#include <b-Positions.mqh>

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

extern  int  STOP = 100; 
extern  int  TAKE = 200;

double  Ma_1, Ma_2,  m2, m3; // m2 и m3 - это маркеры



//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
Ma_1=iMA(NULL,PERIOD_M15,20, 0,MODE_SMA,PRICE_CLOSE,1) ;

Ma_2=iMA(NULL,PERIOD_M15,100,0,MODE_SMA,PRICE_CLOSE,1) ;





//=============================BUY_CONDITIONS=============================================
    

if (Ma_1>Ma_2 && m2==0)     {My_close();  My_buy ();  My_modify();  m2=1;   }  // закрыть если висят открытые позы   
                                                                                                   // и открыть новую
//=============================SELL_CONDITIONS=============================================
 
if (Ma_1<Ma_2 && m3==0)     {My_close();  My_sell ();  My_modify();  m3=1;  }    
 
//======================================

if  ( OrdersTotal()==0 && (m2==1 || m3==1)) {m2=0; m3=0;}  // обнуляет маркеры при закрытии позиций,
                                                           // что дает возможность открывать снова
//==============переход в безубыток ========================
   
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
   
if  (OrderProfit()>0.5)  {My_modify_close_zero ();}


return(0);
  }

//============================функция  ПРОДАТЬ==============================================

int My_sell()
{
    OrderSend (Symbol( ), OP_SELL,  0.01 ,Bid, 0, 0, 0, NULL, 0, 0, CLR_NONE);

}
return;

///==================================КУПИТЬ==========================================
int My_buy ()
{
     OrderSend (Symbol( ), OP_BUY, 0.01 ,Ask, 0, 0, 0, NULL, 0, 0, CLR_NONE);
}
return;


//+---------------------МОДИФИЦИРОВАТЬ сделку сразу по открытии---------------------------------------------+


int My_modify()
 {
   bool   result;
   double take_profit,stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal();
   point=MarketInfo(Symbol(),MODE_POINT);
//----
//   for(int i=0; i<total; i++)
//     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=OrderOpenPrice()-STOP*point;
               else            stop_loss=OrderOpenPrice()+STOP*point;
               
                if(cmd==OP_BUY) take_profit=OrderOpenPrice()+TAKE*point;
                           else take_profit=OrderOpenPrice()-TAKE*point;
               
               
               result=OrderModify(OrderTicket(),0,stop_loss, take_profit,0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
//            break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); }
//     }

   return(0);
  }
  
  
//==============================выставить стопы в безубыток============================================================
int My_modify_close_zero ()
{
   bool   result;
   double stop_loss,point;
   int    cmd,total,error;
//----
   total=OrdersTotal();
   point=MarketInfo(Symbol(),MODE_POINT);
//----
//   for(int i=0; i<total; i++)
//     {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
           {
            //---- modify first market order
            while(true)
              {
               if(cmd==OP_BUY) stop_loss=OrderOpenPrice();
               else            stop_loss=OrderOpenPrice();
               
               result=OrderModify(OrderTicket(),OrderOpenPrice(),stop_loss,OrderTakeProfit(),0,CLR_NONE);
               if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
               else error=0;
               if(error==135) RefreshRates();
               else break;
              }
             //---- print modified order (it still selected after modify)
             OrderPrint();
//             break;
           }
        }
      else { Print( "Error when order select ", GetLastError()); }
//     }
//----
   return(0);
  }

  
//=================ЗАКРЫТЬ СДЕЛКУ=======================================================
int My_close()
  {
   bool   result;
   double price;
   int    cmd,error;
//----
   if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
     {
      cmd=OrderType();
      //---- first order is buy or sell
      if(cmd==OP_BUY || cmd==OP_SELL)
        {
         while(true)
           {
            if(cmd==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
            else error=0;
            if(error==135) RefreshRates();
            else break;
           }
        }
     }
   else Print( "Error when order select ", GetLastError());
//----
   return(0);
  }
 
lottamer:

以下はそのコードです。

EURUSD ペア

b-Positions.mqh を添付してください - そうしないと、実行できません - どのように動作するかわかりません。
 
Chiripaha:
b-Positions.mqh をアタッチします。そうしないと、実行できません - 動作を確認できません。

ファイル:
b-positions.mqh  90 kb
 
lottamer:
Expert Advisor自体に必要な機能がすべて備わっているのに、なぜプラグインとしてこのファイルが必要なのでしょうか?他に何か予定があるのでしょうか?