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

 
arroganzmaschine:
mladenさん、もう一つ質問です。

すべてのオープンオーダーをチェックして、利益が-20より低い場合は、それらを閉じるにはどうすればよいのでしょうか?

次のようなものですか?

//int currentTicket;

for(int i0=OrdersTotal()-1; i0>=0; i0--){

//currentTicket = OrderSelect(i0, SELECT_BY_POS, MODE_TRADES);

if(OrderProfit() <= -20) { /currentTicket = OrderSelect(i0), MOD_TRADES.

OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);

}

}

アロガンズマシン

はい、これで大丈夫です。

利益をチェック する行だけ、こう変えてもいいかもしれませんね。

if ((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) とします。

純粋な "利益 "であることを確認するためです。

 

OrderCloseでBidやAskを設定する必要があるのでしょうか?それともこの線で合っていますか?

 

うーん、何かおかしい。バックテストでは、利益がマイナスになっている注文は決済されません。テスト終了時には、-230の利益のあるオープンオーダーがあります。

 

int start()

{

for(int i0=OrdersTotal()-1; i0>=0; i0--){

if((OrderProfit()+OrderSwap()+OrderCommission())) <= -20) { { {

OrderClose(OrderTicket(),OrderLots(),0,0,CLR_NONE);

}

}

}

これではうまくいきません。

 
arroganzmaschine:
int start()

{

for(int i0=OrdersTotal()-1; i0>=0; i0--){

if((OrderProfit()+OrderSwap()+OrderCommission())) <= -20) { { {

OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);

}

}

}

これではダメなんです。

OrderSelect()を忘れていますね(何かする前に必ず注文を選択する必要があります)。また、どのような種類の注文 を決済しようとしているのかをチェックする部分を追加するのも良いアイデアでしょう。

次のようなものです。

for(int i0=OrdersTotal()-1; i0>=0; i0--) {

if (OrderSelect(u0,SELECT_BY_POS,MODE_TRADES))

if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)

{

if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);

if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);

}

 

TrendHistogramインジケータでヒストグラムをバーに変換するのを誰か助けてくれませんか?添付のTrendFilterインジケータと同じバーを表示させたいのですが。

TrendHistogramが正しく動作するためには、EMA_Adaptiveインディケータが必要です。

ファイル:
 
freakout:
TrendHistogramインジケータでヒストグラムをバーに変換するのを誰か助けてくれませんか?添付のTrendFilterインジケータと同じバーを取得したいのですが TrendHistogramが正しく動作するためにはEMA_Adaptiveインジケータが必要です

フリークアウト

はい、どうぞ

DrawAsBarsをtrueに設定すると、説明したように描画されます。このパラメータを falseにすると、オリジナルと同じように動作します。

ファイル:
 

こんにちは。

バックテストは良いですが、EAがデモ/リアル口座で 動作しない場合、このコードを編集するために誰かが私を助けることができます。

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

//| ハンザ123トレーダー v1

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

#インクルード

#プロパティ コピーライト "hans123"

#property リンク ""

// プログラム作成者: fukinagashi

extern int BeginSession1=6;(backtest 中に編集して全セッションに0を設定し、最終的な結果を得ました)

extern int EndSession1=10;

extern int BeginSession2=10;

extern int EndSession2=14;

extern double TrailingStop = 0;

extern double TakeProfit = 452; extern double TrailingStop = 0; extern double TakeProfit = 452;

extern double InitialStopLoss=40; extern double TakeProfit = 452; extern double InitialStopLoss=40;

double Lots = 0.1;

datetime bartime = 0;

double Slippage=3;

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

//| |

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

int start()

{

int cnt, ticket, err, i, j, cmd;

int MagicNumber;

double ts, tp, LowestPrice, HighestPrice, Price;

bool Order[5];

文字列の設定

datetime Validity=0;

if(IsTesting() && Bars<100) return(0);

MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;

setup="H123_"+ Symbol();

if (バータイム == タイム[0]) { (バータイム == タイム[0])

return(0);

} else {

bartime = Time[0]。

}

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) { (オーダーマジックナンバー()==MagicNumber+3))

if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {.

Print(".");

OrderClose(OrderTicket(), Lots, Bid, 3, Red);

if (err>1) { Print("Error closing buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

} else if (OrderStopLoss()==0){

if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;

} else { tp=0; }.

if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。

} else { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。

if (err>1) { Print("Error modifying Buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

} else if (TrailingStop>0) {.

ts = Bid-Point*TrailingStop;

if (オーダーストップ・ロス()0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);

}

} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) { (注文番号()==MagicNumber+2))

if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {.

Print(".");

OrderClose(OrderTicket(), Lots, Ask, 3, Red);

if (err>1) { Print("売り注文の決済エラー [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

} else if (OrderStopLoss()==0){

if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;

} else { tp=0; }.

if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。

} else { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

} else if (TrailingStop>0) {.

ts = Ask+Point*TrailingStop;

if (OrderStopLoss()>ts && OrderProfit()>0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);

}

}

}

if(AccountFreeMargin()<(1000*Lots)) return(0);

Validity=StrToTime(TimeYear(Time[0]) + ".".+ TimeMonth(Time[0]) + ".".+ TimeDay(Time[0]) + " 23:59");

if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0){

LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HighestPrice=High;

//// BUYSTOP/SELLSTOP 価格が Bid/Ask に近づきすぎるのを避けるため、次のようにする必要があります。

//// この場合、130の無効なストップが表示されます。

//// OP_BUYとOP_SELLを適切に変更するよう実験してみましたが、結果は満足のいくものではありませんでした。

//if (HighestPrice+5*Point<Ask+Spread*Point){。

// cmd=OP_BUY。

//価格=Ask;

//} else {

cmd=OP_BUYSTOP;

価格=HighestPrice+5*Point。

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);

err = GetLastError()。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

//if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL

// cmd=OP_SELL;

//価格=ビッド

//} else {

cmd=OP_SELLSTOP;

価格=最低価格-5*ポイント。

//}

ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);

err = GetLastError()。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

}

if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0){

LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HighestPrice=High。

//if (HighestPrice+5*Point<Ask+Spread*Point){。

// cmd=OP_BUY;

// Price=Ask;

//} else {

cmd=OP_BUYSTOP;

価格=HighestPrice+5*Point。

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);

err = GetLastError()。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

//if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL

// cmd=OP_SELL;

//価格=ビッド

//} else {

cmd=OP_SELLSTOP;

価格=最低価格-5*ポイント。

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);

err = GetLastError()。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

}

}

int func_Symbol2Val(stringシンボル){ { (シンボル)

if(symbol=="AUDUSD"){return(01)。

} else if(symbol=="CHFJPY") { return(10);

} else if(symbol=="EURAUD") { return(10);

} else if(symbol=="EURCAD"){リターン(11);

} else if(symbol=="EURCHF"){リターン(12);

} else if(symbol=="EURGBP"){リターン(13);

} else if(symbol=="EURJPY"){リターン(14);

} else if(symbol=="EURUSDm"){リターン(15);

} else if(symbol=="GBPCHF"){リターン(20);

} else if(symbol=="GBPJPY"){リターン(21);

} else if(symbol=="GBPUSD"){リターン(22);

} else if(symbol=="USDCAD"){リターン(40);

} else if(symbol=="USDCHF"){リターン(41);

} else if(symbol=="USDJPY"){リターン(42);

} else if(symbol=="GOLD"){リターン(90);

} else { Comment("予期せぬシンボル"); return(0);

}

}

int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) { (シンボル, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, 文字列コメント)

datetime OldCurTime;

int timeout=30;

int ticket;

OldCurTime=CurTime()。

while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) { {.

if(OldCurTime+timeout<=CurTime()) { { (OldCurTime+timeout<=CurTime())です。

Print("OrderSendExtended()でエラーが発生しました。タイムアウトが発生しました");

return(0);

}

Sleep(1000);

}

GlobalVariableSet("InTrade", CurTime()); // ロックインジケータの設定

ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);

GlobalVariableDel("InTrade"); // ロックインジケータの解除

return(チケット);

}

 
ccd:
こんにちは。

バックテストは良いのですが、EAがデモ/リアル口座で動作しないので、どなたかこのコードの編集を手伝っていただけませんか?

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

//| ハンザ123トレーダー v1

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

#インクルード

#プロパティ コピーライト "hans123"

#property リンク ""

// プログラム作成者: fukinagashi

extern int BeginSession1=6;(backtest 中に編集して全セッションに0を設定し、最終的な結果を得ました)

extern int EndSession1=10;

extern int BeginSession2=10;

extern int EndSession2=14;

extern double TrailingStop = 0;

extern double TakeProfit = 452; extern double TrailingStop = 0; extern double TakeProfit = 452;

extern double InitialStopLoss=40; extern double TakeProfit = 452; extern double InitialStopLoss=40;

double Lots = 0.1;

datetime bartime = 0;

double Slippage=3;

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

//| |

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

int start()

{

int cnt, ticket, err, i, j, cmd;

int MagicNumber;

double ts, tp, LowestPrice, HighestPrice, Price;

bool Order[5];

文字列の設定

datetime Validity=0;

if(IsTesting() && Bars<100) return(0);

MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;

setup="H123_"+ Symbol();

if (バータイム == タイム[0]) { (バータイム == タイム[0])

return(0);

} else {

bartime = Time[0]。

}

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) { (オーダーマジックナンバー()==MagicNumber+3))

if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {.

Print(".");

OrderClose(OrderTicket(), Lots, Bid, 3, Red);

if (err>1) { Print("Error closing buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

} else if (OrderStopLoss()==0){

if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;

} else { tp=0; }.

if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。

} else { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。

if (err>1) { Print("Error modifying Buy order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

} else if (TrailingStop>0) {.

ts = Bid-Point*TrailingStop;

if (オーダーストップ・ロス()0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);

}

} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) { (注文番号()==MagicNumber+2))

if(TimeDay(OrderOpenTime())!=TimeDay(Time[0])) { {.

Print(".");

OrderClose(OrderTicket(), Lots, Ask, 3, Red);

if (err>1) { Print("売り注文の決済エラー [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

} else if (OrderStopLoss()==0){

if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;

} else { tp=0; }.

if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point.}else{ts=0,0,0,0,0,0,0}。

} else { ts=0; }

OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White)。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

} else if (TrailingStop>0) {.

ts = Ask+Point*TrailingStop;

if (OrderStopLoss()>ts && OrderProfit()>0)注文変更(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);

}

}

}

if(AccountFreeMargin()<(1000*Lots)) return(0);

Validity=StrToTime(TimeYear(Time[0]) + ".".+ TimeMonth(Time[0]) + ".".+ TimeDay(Time[0]) + " 23:59");

if (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0){

LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HighestPrice=High;

//// BUYSTOP/SELLSTOP 価格が Bid/Ask に近づきすぎるのを避けるため、次のようにする必要があります。

//// この場合、130の無効なストップが表示されます。

//// OP_BUYとOP_SELLを適切に変更するよう実験してみましたが、結果は満足のいくものではありませんでした。

//if (HighestPrice+5*Point<Ask+Spread*Point){。

// cmd=OP_BUY。

//価格=Ask;

//} else {

cmd=OP_BUYSTOP;

価格=HighestPrice+5*Point。

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);

err = GetLastError()。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

//if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL

// cmd=OP_SELL。

//価格=ビッド

//} else {

cmd=OP_SELLSTOP;

価格=最低価格-5*ポイント。

//}

ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);

err = GetLastError()。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

}

if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0){

LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];

HighestPrice=High。

//if (HighestPrice+5*Point<Ask+Spread*Point){。

// cmd=OP_BUY;

// Price=Ask;

//} else {

cmd=OP_BUYSTOP;

価格=HighestPrice+5*Point。

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);

err = GetLastError()。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

//if (最安値-5*ポイント>ビッド-スプレッド*ポイント) { // cmd=OP_SELL

// cmd=OP_SELL;

//価格=ビッド

//} else {

cmd=OP_SELLSTOP;

価格=最低価格-5*ポイント。

//}

ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green).OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);

err = GetLastError()。

if (err>1) { Print("Error modifying Sell order [" + setup + "]:(" + err + ") " + ErrorDescription(err)); }.

}

}

int func_Symbol2Val(stringシンボル){ { (シンボル)

if(symbol=="AUDUSD"){return(01)。

} else if(symbol=="CHFJPY") { return(10);

} else if(symbol=="EURAUD") { return(10);

} else if(symbol=="EURCAD"){リターン(11);

} else if(symbol=="EURCHF"){リターン(12);

} else if(symbol=="EURGBP"){リターン(13);

} else if(symbol=="EURJPY"){リターン(14);

} else if(symbol=="EURUSDm"){リターン(15);

} else if(symbol=="GBPCHF"){リターン(20);

} else if(symbol=="GBPJPY"){リターン(21);

} else if(symbol=="GBPUSD"){リターン(22);

} else if(symbol=="USDCAD"){リターン(40);

} else if(symbol=="USDCHF"){リターン(41);

} else if(symbol=="USDJPY"){リターン(42);

} else if(symbol=="GOLD"){リターン(90);

} else { Comment("予期せぬシンボル"); return(0);

}

}

int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) { (シンボル, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, 文字列コメント)

datetime OldCurTime;

int timeout=30;

int ticket;

OldCurTime=CurTime()。

while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) { {.

if(OldCurTime+timeout<=CurTime()) { { (OldCurTime+timeout<=CurTime())です。

Print("OrderSendExtended()でエラーが発生しました。タイムアウトが発生しました");

return(0);

}

Sleep(1000);

}

GlobalVariableSet("InTrade", CurTime()); // ロックインジケータの設定

ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);

GlobalVariableDel("InTrade"); // ロックインジケータの解除

return(ticket)。

}

InitialStopLossを10倍にして、ライブ口座で試してみてください。そのEAは4桁のブローカー用に書かれています。

______________________

追記:TakeProfitも10倍すると一貫してpipsになりますが、この数値でテストすると、バックテスト時と同じ結果にはなりません(単にバックテストでは、デモ口座でも ライブ口座でも許されない値をこの2つに使うことができたからです)。

 
mladen:
zigflip 最後の2つのpsarは、"psarの最後の上/下ペア "または "最後の2つのバー "のように?

メールマガジンを購読していたはずなのに、返信が遅くなり申し訳ありません。

最後のpsarのペアのことです。

私は主に最後のpsarを監視したいのですが、上限/下限の変更が発生したときに最後の2つのレベルが必要になり、うーん、多分Xバーバックでなければなりません...ああ、私は今あなたが言っていることを参照してください、第二の思考でおそらく上限/下限の最後のセット、それは最初の新しい方向のpsarの到着時に最後の変更にトリミング

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