フラクタルブレイクアウトスタック

 

こんにちは、皆さん。


私は、時間帯と移動平均でフィルタリングされたフラクタルブレイクアウト EAを作ろうとしています。


どなたか正しい方向性を示してくれる方、またはコードの不具合を指摘してくれる方はいらっしゃいますか?


1: iFractal()を入力した後にしか買いが入らない。

2: フラクタルがどこにあるのか入力されません。

//+------------------------------------------------------------------+
//|                                                    Simple EA.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//Literally copying Ferrus Format to a tee

extern string Label1="===General Trade Settings===";
extern int   TakeProfit=25;
extern int    StopLoss=10;
extern int    TrailingStop=0;
extern int    Slippage=2;
extern double  Lots=0.1;
//---------Time Filter--------//

//-----------Money Managerment---------//
extern bool Money.Management=true ;
extern double Risk=1;


//----------------------Moving Average-----//
extern string Label5="===Moving Average Settings===";
extern int    MA_Period=200;
extern int    MA_Shift=0;
extern int    MA_Type=1;
extern int    MA_Price=0;
//----------


//-------Initialize EA Orders Accounting-----//


int start()
{

int mypoint;

if (Digits==3||Digits==5){ mypoint=10;}
else {mypoint=1;}


//------------Orders Accounting---------//

 int total = OrdersTotal();
if(total<1)
{
//------------Money Management----------//

//Money Management sequence
 if (Money.Management)
   {
      if (Risk<1 || Risk>1000)
      {
         Comment("Invalid Risk Value.");
         return(0);
      }
      else
      {
         Lots=MathFloor((AccountFreeMargin()*AccountLeverage()*Risk*Point*mypoint*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);
      }
   }

//-------------EMA SETTINGS-----------------//
//
//------------------------------------------//
double EMA=iMA(NULL,0,MA_Period,MA_Shift,MA_Type,MA_Price,0);
double BarCloseB;
double BarCloseS;
BarCloseB=Bid;
BarCloseS=Ask;
//----Processing a buy---------//
//


double fractalU=iFractals(NULL,0,1,0);
double fractalD=iFractals(NULL,0,2,0);



//-----------------------------//
if((BarCloseB>EMA) && (BarCloseB>=fractalU))
{
double SLB=Bid-StopLoss*Point*mypoint;
double TPB=Bid+TakeProfit*Point*mypoint;
int buy= OrderSend(Symbol(),0,Lots,Ask,Slippage,0,0);
}

if(buy>0) 
{
OrderSelect(buy,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(buy,OrderOpenPrice(),SLB,TPB,0,Green);
}
//---------Processing a sell---------//
//
//-----------------------------------//
if((BarCloseS<EMA)&&(BarCloseS<=fractalD))
{
double SLS=Ask+StopLoss*Point*mypoint;
double TPS=Ask-TakeProfit*Point*mypoint;

int sell= OrderSend(Symbol(),1,Lots,Bid,Slippage,0,0);
}

if (sell>0)
{
OrderSelect(sell,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(sell,OrderOpenPrice(),SLS,TPB,0,Green);
}

Print(GetLastError());
return(0);
}
}
 
フラクタル

ブレイクアウト?

double fractalU=iFractals(NULL,0,1,0);     //What if you had chosen for bar 1  ??
double fractalD=iFractals(NULL,0,2,0);             //then i think you will get sell trades also

新しい取引を開始する前に取引回数をカウントしてください。

などなど、いろいろなエラーがありますが、まずはこれを試してみてください。


 
deVries:
フラクタル

ブレイクアウト?

新しい取引を開始する前に取引回数をカウントしてください。

などなど、いろいろなエラーがありますが、まずはこれを試してみてください。



deVriesさん。


私はその文章を理解するのに苦労しています。私が感じたことは2つあります。


1)最初のバーを選べということですか?

2)私のOrdersAccountingを再実行する。


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

 
ZacharyRC:

やあ、デブリーズ。


私はその言葉を理解するのに苦労しています。私が感じたのは2点です。


1)最初のバーを選べということでしょうか?

2)OrdersAccountingをやり直すことです。


またよろしくお願いします。


double fractalU=iFractals(NULL,0,1,0);

リターンは私の次のポストを参照してください.......

double fractalU=iFractals(NULL,0,1,1);

リターンは、私の次のポストを参照してください.......

のような注文の数え方をしていると

 int total = OrdersTotal();
if(total<1)
{
 

このEA以外のトレードをオープンまたはペンディングにしている場合、注文がオープンされない状況が発生します。

バックテストでは、そのようなことは見られませんが、口座でEAを実行すると、気づくでしょう。

 

あなたのFRCTALコードで少しテストしてみました。

このように

   double fractalU;
   for(int y=0;fractalU < Point;y++)
     {
      fractalU=iFractals(NULL,0,1,y);
      Alert("fractalUp  y =  "+y+ " "+fractalU);
     }

同じことをして、あなたは正しいフラクタルバーを 取得するために選択する必要がありますどのようなバーが表示されます。

 
deVries:

あなたのFRCTALコードで少しテストしてみました。

このように

同じようにすると、正しいフラクタルバーを得るためにどのようなバーを選択しなければならないかがわかると思います。


こんにちは、deVries!



あなたは本当に役に立つ男だ!

 
deVries:

あなたのFRCTALコードで少しテストしてみました。

このように

同じようにすると、正しいフラクタルバーを取得するためにどのようなバーを選択しなければならないかがわかります。


うーん...


deVriesさん、チェックは完璧で、「下降」フラクタルと「上昇」フラクタルそれぞれについて正しい価格をアラートしてくれました。


注文を処理するときに、フラクタルが「無視」されているので、私はまだコードのエラーを調査しています。


おっしゃるとおり、OrdersAccountingセクションを変更する必要があります。EAをチャートに置くとすぐに取引が行われるからです。

 
deVries:

あなたのFRCTALコードで少しテストしてみました。

このように

同じようにすると、正しいフラクタルバーを取得するためにどのようなバーを選択しなければならないかがわかります。


バカな私!


コードを調査した結果、私は == の代わりに => を使っていて、それがバッファの問題を引き起こしていたのです。


デブリーズに感謝!

 
ZacharyRC:

SILLY ME!


コードを調査した結果、私は == の代わりに => を使っていて、それがバッファの問題を引き起こしていたのです。


ありがとう、デブリーズ!

つまり.......
if((BarCloseB>EMA) && (BarCloseB>=fractalU))
に変更しました。
if((BarCloseB>EMA) && (BarCloseB==fractalU))

このようにすると、これもまた正しくありません。

.

このような何か

if((BarCloseB>EMA) && (BarCloseB>fractalU)&& fractalU>Point)

を使えば、fractalU をテストで見たとおりの状態にできるかもしれません。

 
deVries:
つまり......。
に変更しました。

今、こうしてみると、これもまた正しいとは言えないでしょう。

.

このようなもの

はあなたのために動作し、あなたがテストで行われたのを見る方法fractalUを得るかもしれません...


私はそれがこの時点で正しく取引されているため、あなたの入力を実装していません。私はあなたの入力で今夜遅くにそれを試してみます。



deVriesさんありがとうございます。

 

こんにちは、deVriesです。


私の最終的なコードでは、多くのピップ後にブレークイーブンに修正ストップロスを 入れようとすると、問題が発生します。


何か目立ったエラーはありませんか?

extern int    StopLoss=10;

//-------------------------------------------------//
extern bool Move.BE=true;
extern int  MoveStopTo=1;



//----------------------------------------------//
//-----------------EXITING ORDERS---------------//
if(OrdersTotal()>1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==(OP_BUY)&&(Move.BE))
{
if(Bid - OrderOpenPrice() >= Point * StopLoss)
 {
    if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo)
     {
     OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);
}
}
}
}

if(OrdersTotal()>1)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
{
 if(OrderType()==(OP_SELL)&&(Move.BE))
 {     
          
if(OrderOpenPrice() - Ask >= Point * StopLoss) 
 {
    if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) 
     {
      OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
}
}
}
}
//--------CHECKING FOR ERRORS-------------------//
Print(GetLastError());
return(0);
}
}

理由: