コーディングのヘルプ - ページ 483

 

いやはや、本当にあなたはスターですね。 私はトレードが大好きですが、あなたの助けなしでは不可能でしょう。 ありがとうございました。

 
xtractalpha:
こんにちは。

LotsizeCalc()関数について、どなたか助けていただけませんか?

私の最後の取引が負けた場合、私のロットサイズに'MartingaleAmount'を掛けたいと思います。私の最後の取引が勝者であった場合、私は「通常の」ロットサイズを使用したいと思います。残念ながら、EAをバックテストすると、ジャーナルからエラー4051が表示されます。

LotsizeCalc()」関数なしでEAを実行しようとすると、EAが動作するので、それは、ロットサイズと関係があるようです。

なぜ私のロットサイズ関数が動作しないのか、どなたかご存知でしょうか?

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

Thierry

extern int MaximumTrades = 10; extern double StopLoss=25; extern double TakeProfit=50; extern double MartingaleAmount = 1.5; input double LotSize=0.1; int magic; double pips; int tradeNumber; string ScreenComment; double martinlot; double martinsize;

[/PHP]

double LotsizeCalc() { if(OrderSelect(lastTradeTicket(),MODE_HISTORY)) if(OrderProfit()<0 && tradeNumber 0){ if(OrderSelect(ticket,SELECT_BY_TICKET)){ sl = OrderOpenPrice()+(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()-(TakeProfit*pips); if(OrderType()==OP_BUY){ sl = OrderOpenPrice()-(StopLoss*pips); if(StopLoss==0)sl=0; tp = OrderOpenPrice()+(TakeProfit*pips); } if(!OrderModify(ticket,price,sl,tp,0,Magenta)) { err = GetLastError(); Print("Encountered an error during modification!"+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to select the order for some reason Print("Failed to Select Order ",ticket); err = GetLastError(); Print("Encountered an error while seleting order "+(string)ticket+" error number "+(string)err+" "+ErrorDescription(err) ); } } else{//in case it fails to place the order and send us back a ticket number. err = GetLastError(); Print("Encountered an error during order placement!"+(string)err+" "+ErrorDescription(err) ); if(err==ERR_TRADE_NOT_ALLOWED)MessageBox("You can not place a trade because \"Allow Live Trading\" is not checked in your options. Please check the \"Allow Live Trading\" Box!","Check Your Settings!"); } }

Thierry

この関数を使って、最後に閉じた注文が利益または損失で閉じられたかどうかを調べることができます。

[PHP]double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magicNumber!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

return(lastProfit);

}

lastOrderProfit()関数の 結果をチェックして、それが<0であれば、マーチンゲールルールを適用するのみです。

 

Mladenさん、こんにちは。またまた私です...。

このインジケータのラインにはバッファが設定されていないようなので、iCustomを使用しているEAでこのインジケータのラインを使用することは可能でしょうか?

ありがとうございます。

ファイル:
 
Jason2005:
こんにちは、Mladen!また私です...

このインジケータのラインにはバッファが設定されていないようなので、iCustomを使用してEAで使用するにはどうすればよいでしょうか?

ありがとうございます。

これらはオブジェクトです。

オブジェクトには名前でアクセスできます(オブジェクトの正確な名前を知っている必要がありますが、そのインディケータがチャート上でアクティブで、それらのオブジェクトがチャート上に描かれている必要があります)。

 
mladen:
これらはオブジェクトです。オブジェクトには名前でアクセスできます(オブジェクトの正確な名前を知っている必要がありますが、インディケータはチャート上でアクティブでなければならず、それらのオブジェクトはチャート上に描かれていなければなりません)。

素晴らしい。では、EAからどのようにインジケータを呼び出せばいいのでしょうか?iCustom以外の何かで、それとも私が勘違いしているのか...。ありがとうございます。

 
Jason2005:
素晴らしい。では、EAからどのようにインジケータを呼び出せばいいのでしょうか?iCustom以外の何かで、それとも私が勘違いしているのか...。mladenさんありがとうございます。

そのインジケータは、単純に100pips単位の0,20,50,80pipsにレベルを描画します。一番簡単な方法は、EAからそれらのレベルがクロスしているかどうかをチェックすることです。

オブジェクト名(とその価格)を使ってみると、最高値と最安値に依存するため、ラインの正確な名前を知ることはできません。上記のようなモードを使用する

 
mladen:
そのインジケータは単純に100pipsごとに0,20,50,80pipsでレベルを描画します。一番簡単な方法は、EAからそのレベルがクロスしているかどうかを確認することです。オブジェクト名(とその価格)を使ってみると、最高値と最安値に依存するため、ラインの正確な名前を知ることはできません。上記のモードを使用する

どのようにすればいいのか、例があれば教えてください。 すみません、コーディングを始めたばかりで、売買の条件となるレベルをどのように確認 するのか、コツがつかめずにいます。

 
Jason2005:
どのようにそれを行うかの例を持っていますか? 私はコーディングを始めたばかりで、売買の条件でこれらのレベルが交差しているかどうかを確認する方法のコツをつかめていません。

Jason2005

添付したインジケータにどのように行うかのコードがあります。

 
mladen:
Jason2005 添付のインジケータに、どのように実行されるかのコードがあります。

それなら、こんな感じでしょうか?

MathMod(i, 5) == 0.0 となります。
 
mladen:
Thierry

この関数は、最後に決済された注文が利益で決済されたか損失で決済されたかを調べるために使用します。

double lastOrderProfit(int magicNumber=0)

{

datetime lastTime = 0;

double lastProfit = 0;

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==false) break;

if (magicNumber!=0)

if (OrderMagicNumber() != magicNumber) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderCloseTime() <= lastTime) continue;

lastTime = OrderCloseTime();

lastProfit = OrderProfit()+OrderSwap()+OrderCommission();

}

return(lastProfit);

}

lastOrderProfit() 関数の結果を確認し、それが < 0 であれば、あなたのマーチンゲールルールを適用してください。


Mladenさん、こんにちは。

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

私のlastTradeTicket()関数が同じ仕事をするので、lastorderprofit関数は必要ではありません。

私のEAをご覧になっていただけますか?

コードの編集をお願いしているわけではありませんが、何が間違っているのか教えていただければ幸いです。

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

Thierry

53_martingale.mq4

ファイル: