ヘルプファインターンEA

 

EAを微調整するのを手伝ってくれる人はいますか?

もっといい方法があるはずだ - 私が見る限り、間違った場所で売買されている

ファイル:
jbtest3.mq4  5 kb
 
delcor wrote>>

EAを微調整するのを手伝ってくれる人はいますか?

もっといい方法があるはずだ。間違った場所で売買しているようにしか見えない。

あなたの戦略を説明したいですか?微調整をする前に、そのEAが記述された戦略に従ってコード化されているかどうかを確認する必要があります。

もしコードが正しいのにEAからのトレードがうまくいかないのであれば、ストラテジーに問題があるのでは?マニュアル取引でそのストラテジーはうまく機能していますか?

 
ronaldosim:

戦略を説明しますか?微調整を行う前に、記載されたストラテジー通りにコーディングされているかどうかを確認する必要があります。

コードが正しいのにEAからのトレードがうまくいかない場合、ストラテジーに問題があるのでしょうか?マニュアル取引ではストラテジーはうまく機能しているのでしょうか?

ご返信ありがとうございます。

ストラテジーは、絵馬がクロスしたときだけ売買するものです。うまくいく設定があり、クロスしたときだけ売買すると利益が出 ます。

このままでは、2つの絵馬のクロスでは買えません。

この段階ではそれだけを実行させたいのです。

私はプログラミングの初心者ですが、もっと勉強したいと思います。

助けてください。

このままでは、eur/usd 15と1h tfで仕事をする - しかし、十分ではありません。

 
delcor wrote>>

またのお越しをお待ちしております。

絵馬がクロスした時のみ売買する設定になっており、クロスした時のみ売買すると利益が出るようになっています。

このままでは、2つの絵馬のクロスでは買えません。

この段階ではそれだけを実行させたいのです。

私はプログラミングの初心者ですが、もっと勉強したいと思います。

助けてください。

そのままでは、eur/usd 15と1時間足のTFで仕事をする - しかし、十分ではありません。

EMAのクロスについては、あなたのコードは正しくありません。

Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);

長エマと短エマにそれぞれ2つのiMAが必要です。

SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);

LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);

SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2); LEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);

LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

そして、クロスをチェックするために

if (SEMA1>LEMA1 && SEMA2<LEMA2) send buy order

売りの場合

if (SEMA1<LEMA1 && SEMA2>LEMA2) sell orderを送信します。

 
ronaldosim:

EMAのクロスの場合、コードが正しくありません。

Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);

長エマと短エマにそれぞれ2つのiMAが必要です。

SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);

LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);

SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2); LEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);

LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

そして、クロスをチェックするために

if (SEMA1>LEMA1 && SEMA2<LEMA2) send buy order

売りの場合

もし(SEMA1<LEMA1 && SEMA2>LEMA2) ならば売り注文を出す。

ということで

SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);

LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1); LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1)

SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2); LEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);

LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2); LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2)

は、「未決済注文のチェック - "移動平均の取得 "の下」に配置する必要があります。

と、"

if (SEMA1>LEMA1 && SEMA2<LEMA2) sendbuy order" where ?

また、LEMA1とLEMA2は、私はトップで定義する必要があります。


お初

あなたが私をskypeしたい場合、私のskypeはdelcor59です。

あなたの助けをいただきありがとうございます

 
delcor wrote>>

OK

SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);

LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);

SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2); LEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);

LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2); LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2)

は、「未決済注文のチェック - "移動平均の取得 "の下」に配置する必要があります。

と、"

if (SEMA1>LEMA1 && SEMA2<LEMA2) send buy order" where ?

また、LEMA1とLEMA2は、私が一番上に定義する必要があります。

まだこの中で新しい

あなたが私をskypeしたい場合、私のskypeはdelcor59です。

あなたの助けをいただきありがとうございます

このようなものは、あなた自身のコードを変更する....

void CheckForOpen()
{
double Ema;
int res;
//---- 新しいバーの最初のティクスのみ取引に行く。
if(ボリューム[0]>1) return;
//---- 移動平均を取得する
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0)となります。
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1); double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2); double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2); double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

//---- 売り条件
// if(オープン[1]>Ema && クローズ[1]<Ema)
if (SEMA1<LEMA1 && SEMA2>LEMA2)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red).OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
を返します。
}
//---- 買いの条件
// if(オープン[1]<Ema && クローズ[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
を返します。
}
//----
}

void CheckForClose()
{
ダブルEma;
//---- 新しいバーの最初のティクスのみ取引に行く
if(ボリューム[0]>1) return;
//---- 移動平均を取得
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0)となります。
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1); double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2); double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2); double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//---- オーダータイプのチェック
if(OrderType()==OP_BUY)
{
// if(オープン[1]>イーマ && クローズ[1]<イーマ)
if (SEMA1<LEMA1 && SEMA2>LEMA2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White).If(SEMA2<Ema&&SEMA2<Ema))。
ブレーク

if(OrderType()==OP_SELL)
{
// if(オープン[1]<イーマ && クローズ[1]>イーマ)
if (SEMA1>LEMA1 && SEMA2<LEMA2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
ブレーク
}
}
//----
}

 
ronaldosim:

このように、自分のコードを修正することができるのです。

void CheckForOpen()
{
ダブルEma;
int res;
//---- 新しいバーの最初のティックだけ取引に行く。
if(ボリューム[0]>1) return;
//---- 移動平均を取得する
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0)となります。
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1); double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2); double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2); double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);

//---- 売り条件
// if(オープン[1]>Ema && クローズ[1]<Ema)
if (SEMA1<LEMA1 && SEMA2>LEMA2)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red).OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
を返します。
}
//---- 買いの条件
// if(オープン[1]<Ema && クローズ[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
を返します。
}
//----
}

void CheckForClose()
{
ダブルEma;
//---- 新しいバーの最初のティクスのみ取引に行く
if(ボリューム[0]>1) return;
//---- 移動平均を取得
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0)となります。
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1); double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2); double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2); double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//---- オーダータイプのチェック
if(OrderType()==OP_BUY)
{
// if(オープン[1]>イーマ && クローズ[1]<イーマ)
if (SEMA1<LEMA1 && SEMA2>LEMA2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White).If(SEMA2<Ema&&SEMA2<Ema))。
ブレーク

if(OrderType()==OP_SELL)
{
// if(オープン[1]<イーマ && クローズ[1]>イーマ)
if (SEMA1>LEMA1 && SEMA2<LEMA2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
ブレーク
}
}
//----

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

Eaをバックテストすると、買いだけ表示されて売りがない。

 
delcor wrote>>

どうもありがとうございました

Eaをバックテストすると、買いしか表示されず、売りが表示されません。

yr start()で成行注文の有無をチェックすると、その注文の種類を出さないようにする。つまり、買いで始めると常に買い、売りで始めると常に売りとなる。このチェック条件を外すと

 
ronaldosim:

Yr start()で成行注文の有無をチェックする際、注文の種類によっては成行注文を出さないようにする、つまり買いで始めると常に買い、売りで始めると常に売りとなる、そのチェック条件を外す

EA の下部にあるチェックコンディションを指しているのでしょうか?

//+------------------------------------------------------------------------+
//| Startfunction|
//+------------------------------------------------------------------------+
void start()
{
//---- history and trading
if(Bars<100 || IsTradeAllowed()==false) return;
//---- current symbol で open orders を計算する
if(CalculateCurrentOrders(Symbol())==0)CheckForOpen();
else CheckForClose();
//----

}


というのも

void CheckForOpen()

void CheckForClose()

 
delcor:

はEA下部のチェックコンディションを指しているのでしょうか?

//+------------------------------------------------------------------+
///Start関数
//+------------------------------------------------------------------+
void start()
{
//---- 履歴と取引をチェックする
if(Bars<100 || IsTradeAllowed()==false) return;
//---- 現在のシンボルで未決済注文を計算する
if(CalculateCurrentOrders(Symbol())==0):現在のシンボルによる未決済注文を計算します。CheckForOpen()を実行します。
else CheckForClose();
//----

}


というのは

void CheckForOpen()

void CheckForClose()




このEAが実行されたときに何が起こるかをステップごとに示すEAプログラミング上のテストシステムがあるか教えてください。

 
delcor wrote>>

はEA下部のチェックコンディションを指しているのでしょうか?

//+------------------------------------------------------------------+
//| 関数の開始
//+------------------------------------------------------------------+
void start()
{
//---- 履歴と取引をチェックする
if(Bars<100 || IsTradeAllowed()==false) return;
//---- 現在のシンボルで未決済注文を計算する
if(CalculateCurrentOrders(Symbol())==0):現在のシンボルによる未決済注文を計算します。CheckForOpen()を実行します。
else CheckForClose();
//----

}

というのは

void CheckForOpen()

void CheckForClose()

if(Bars<100 || IsTradeAllowed()==false) return;
//---- 現在のシンボルで未決済注文を計算する
CheckForOpen();
CheckForClose();
//----