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

 

EuroX2_slのEAを編集したいのですが...................。

こんにちは、すべてのプログラマ。

私は外国為替取引に 新しいですし、あまりにもこのフォーラムに新しいです。初めて、私は10ポイント3その後、EuroX2_sl、10ポイント3 EAスクリプトから拡張されている学習しています。フォワードテストをした結果、このEAは私のような初心者が学習するにはかなりOKだと思います。フォワードテストでは、Open Positionはうまくいったのですが、Close Positionがうまくいきません(条件もあるのですが)。多分、コードに何か問題があるのだと思います(私はプログラマーではないので)。どの部分が間違っているのかチェックしていただけますか?

OPENポジションは利益が出るので問題ないと思うのですが、問題はCLOSEポジションで、インジケータがあってもCLOSE(BUYまたはSELL)しないので、かなり損失が膨らんでしまいます・・・・・・・・。

どなたかご存知の方、このコードを編集するのを手伝ってください・・・。

私が行ったコードは以下の通りです。

-------- EuroX2_sl のスクリプトの一部を10ポイントから3ポイントに拡張したものです。

//+--------------------------------------------------------

// 正しく市場に参入することは重要です。

// しかし、正しく終了することはもっと重要です。

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // 開いたポジションを確認する)

OrderType()<=OP_BUY && (オーダータイプ)>=OP_BUY && (オーダータイプ)

OrderType()>=OP_SELL && (オーダータイプ)>=OP_BUY && (オーダータイプ)

OrderType()>=OP_BUY && オーダータイプ()>=OP_BUY && オーダーシンボル()==SYNC.

OrderSymbol()==Symbol())// シンボルをチェック

{

//+--------------------------------------------------------------

if(OrderType()==OP_BUY)の場合// ロングポジションがオープン

{

//+-------------------------------------------------------------------

//+ クローズポジションの条件

//+-------------------------------------------------------------------

買いポジションを閉じる //+--------------- --------------------------------

if ( Stoch_Main_M15_Cu < Stoch_Sig_M15_Cu )

ストキャスティクスメイン < ストキャスティクスシグナル //+ ストキャスティクスメイン < ストキャスティクスシグナル

//+------------------------------------------------------------------

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; //ポジションクローズ

return(0); // 終了

}

//+-----------------------------------------------------------------------

// トレーリングストップのチェック

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<買値-売値*トレイリングストップ)

{

オーダーモディファイ(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

//+--------------- 売りポジションを閉じる --------------------------------

else // 空売りポジションに移行する

{ //+削除しないでください

if(OrderType()==OP_SELL) // ショートポジションがオープンされました。

{

}

//閉じるべきか?

//+----------------------------------------------------------------------------

if ( ストキャスティクスメイン_M15_Cu > ストキャスティクスシグナル_M15_Cu )

//+ ストキャスティックメイン > ストキャスティックシグナル

//+-----------------------------------------------------------------------------

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ; // クローズポジション

return(0); // 終了

}

//+----------------------------------------

// トレーリングストップのチェック

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)))をチェックします。| (OrderStopLoss()==0))の場合

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Poi nt*TrailingStop,OrderTakeProfit(),0,Red).OrderTicket(),OrderOpenPrice(),Ask+Poi nt*TrailingStop,OrderTakeProtect(),0,Red);

return(0);

}

}

}

}

}

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

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

fxgroup

 

週足/日足で最も優れた指標は何ですか?

この質問は、経験豊富なトレーダーに指示することができます。

信頼性の高い(すでにテストされている)指標は、私たちの中に主要なトレンドの動きについてのアイデアを与える可能性があります。

1-将来の週

2- 将来の日(または次の日)

私はB/Sエントリーレベルを求めているのではないことを承知で。

注:来週の方向性が決まれば、いつエントリーするかのベースが作れると思います。

ありがとうございます。

 

mqlに関する質問

コード

//ポジションをオープンした場合、それを管理する。

//ストップロスを変更する

cnt=OrdersTotal();

while(cnt>=0)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) // && Reversed==False)

{

Print("チケット ",OrderTicket()," modified.");// なぜ、注文を変更する前にここに書くのか(私の理解では)?

if (OrderType()==OP_SELL)

{

if (TrailingStop>0)

{

if ((OrderOpenPrice()-Ask)>=(TrailingStop*Point+Pips*Point))

{

if (OrderStopLoss()>(Ask+Point*TrailingStop)||OrderStopLoss()==0))の場合

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,0,Purple).OrderOpenPrice()-TakeProfit*Point-TrailingStop*Point,0,Purple);

return(0);

こんにちは。なぜ注文を変更する前に :Print("Ticket ",OrderTicket()," modified."); が書かれるのか、どなたか教えてください。私はそれを理解するように、それはそれが変更されていない場合でも、"注文チケットが 変更されました "と表示されます。これは、ターミネータコードの一部です。

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

 
Flytox:
コード

// もしポジションを開いていたら、それを処理する。

//ストップロスを変更する

cnt=OrdersTotal();

while(cnt>=0)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) // && Reversed==False)

{

Print("チケット ",OrderTicket()," modified.");// なぜ、注文を変更する前にここに書くのか(私の理解では)?

if (OrderType()==OP_SELL)

{

if (TrailingStop>0)

{

if ((OrderOpenPrice()-Ask)>=(TrailingStop*Point+Pips*Point))

{

if (OrderStopLoss()>(Ask+Point*TrailingStop)||OrderStopLoss()==0))の場合

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,0,Purple).OrderOpenPrice()-TakeProfit*Point-TrailingStop*Point,0,Purple);

return(0);

こんにちは。なぜ注文を変更する前に :Print("Ticket ",OrderTicket()," modified."); が書かれるのか、どなたか教えてください。私はそれを理解するように、それはそれが変更されていない場合でも、 "注文チケットが変更されました "と表示されます。これは、ターミネータコードの一部です。

ありがとうございます。

あなたの言うとおり、修正後に書くか、メッセージを次のようにすべきです:"Trying to modify order :",OrderTicket()

 

私はmqlを勉強していますが、あなたの記事と回答はとても役に立ちます。

 

以下の4つの編集を行えば、十分かもしれません。

1.102行目をコメントアウトし、次のようにする。

//IsTrade = True;[/PHP]

2. Change blank line 104 to be

if ( Bid > OrderOpenPrice() - GAP * Point ) IsTrade = true;

3. Change blank line 120 to be

[PHP]if ( Ask < OrderOPenPrice() + GAP * Point ) IsTrade = true;

4.GAP」変数(extern int)を追加し、「ヘッジ」が入るべきピップ数を設定する。

しかし、以前このフォーラムのどこかで誰かが指摘しましたが、同じシンボルで本当に「ヘッジ」することはできません;それは損切りをするのとほとんど同じです。損切りして、また相場が反転したときに戻ってくるのがいいのかもしれませんね・・・。

 
ralph.ronnquist:
以下の4つの編集を行えば十分かもしれません。

1.102行目をコメントアウトし、次のようにする。

//IsTrade = True;[/PHP]

2. Change blank line 104 to be

if ( Bid > OrderOpenPrice() - GAP * Point ) IsTrade = true;

3. Change blank line 120 to be

[PHP]if ( Ask < OrderOPenPrice() + GAP * Point ) IsTrade = true;

4.GAP」変数(extern int)を追加し、「ヘッジ」が入るべき設定されたpips数である。

ただ、以前この掲示板のどこかで誰かが指摘していましたが、同じシンボルで「ヘッジ」することはできないので、損切りするのとほとんど同じです。損切りして、また価格が反転したときに戻ってくるのがいいのかもしれませんが・・・。

役に立ちませんでした。で、もう少し具体的に言うと、私が実際にEAにやってほしいことは以下のようなことです。

ある条件に基づいて、EAが売買取引を行う。一旦、売買が成立すると、最終的に利益確定するまでに3~5日かかることもある。その間、3~5日の間に、反対方向に何度か売買のチャンスがあるかもしれません。EAには、元の取引は残したまま、それらの機会を利用して欲しいのです。なぜなら、最終的には利益で決済されるからです。これらの反対方向の追加取引は、最終的に利益確定で終了するものの、技術的には元の取引に対するヘッジとなります。しかし、私はEAが同じ方向で1つの取引のみを開くことを望んでいます。つまり、同時に開く最大取引は、買い1つと売り1つということになります。

これがお役に立てれば幸いです。

ご回答ありがとうございます。

 

うーん、あなたのEAを試したわけではないのですが、ロジックを読むと、買いの後に続く売りを止めるのは、「IsTrade」が真であることだけのような気がするのです。(ただし、買いと同時に売りを建てることはありません)。

ですから、Sellのロジックを無条件に適用させたいのであれば、私の編集(1)のみ--2-4は忘れてください--で済むと思いました。もしくは、IsTradeのロジックを削除して ください。

もっとも、「TickCheck」や「BarCount」という、同じティックや同じバーで別の取引を停止する下位のロジックもありますが、それはまだ適用させたいのでしょう。

もちろん、あなたが省略したシグナリングの部分については、私は多くを語ることはできません。例えば、"Sell_Signal" を上げると "BuyOrders" を考慮するのであれば、もっとやるべきことがあります。

 

コーディングの面白さを伝える

BACKを押す前に、私を助けてくださいませんか?

私はインジケーターのコーディングは初めてですが、EAのコーディングの仕方は知っています。100%ではありませんが、十分です。

とにかく、私は誰か親切な人が私を助けるだろうと思っていた。

各行について説明し、例を挙げてください。

p.s. これはMACDの コードの一部です。

int start()

{

int limit;//what does Limit equal,0?

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---- macd counted in the 1-st buffer

for(int i=0; i<limit; i++)//i<0?

MacdBuffer=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

//---- signal line counted in the 2-nd buffer

for(i=0; i<limit; i++)

SignalBuffer=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);

//---- done

return(0);

}

//+------------------------------------------------------------------+

誰かもっと多くの人が助けてくれて、インジケータのコーディングのヒントをくれたりしたら、とてもうれしいです。

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

Dan.

 

EA内部でスクリプトを実行するには?

こんにちは。

EA内のスクリプトディレクトリでスクリプトを実行する方法を教えてください。

If (条件true)

{

スクリプトを実行します。

}

よろしくお願いします。

よろしくお願いします。

ジミー