//---------------------------------------------------------- void init() { // int minstop=MarketInfo(Symbol(),MODE_STOPLEVEL); //Print("levelbuy_stop: "+minstop;") } //----------------------------------------------------------- void start() { if (!IsTradeAllowed()) return; level_buy_stop=0; level_sell_stop=0。 StepingStop()です。 StepingPendings()。 if (TotalBuy ()==0 && TotalBuyStop ()==0) SetBuyStop (); if (TotalSell()==0 && TotalSellStop()==0) SetSellStop(); Comment("レベル買いストップ=",level_buy_stop*Point, "閾値", "レベル売りの停止位置=", level_sell_stop*Point)。 } //--------------------------------------------------------------------------------------------- void StepingStop() { if (StepStop<1) return; int ask, bid, open, stop, x; ダブル・ロス for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; if (OrderSymbol()!=Symbol())。 if (OrderType()==OP_BUY) { bid=MathRound(Bid/Point)。 open=MathRound(OrderOpenPrice()/Point)。 stop=MathRound(OrderStopLoss()/Point)。 x=(ビッド-オープン)/ステップストップ; x--; x*=ステップストップ。 level_sell_stop=open+x; if (stop>=open+x) loss=(open+x)*ポイント。 OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE); } if (OrderType()==OP_SELL) { ask=MathRound(Ask/Point)。 open=MathRound(OrderOpenPrice()/Point)。 stop=MathRound(OrderStopLoss()/Point)。 x=(open-ask)/StepStop;x--;x*=StepStop。 level_buy_stop=open-x。 if (stop>0 && stop<=open-x) loss=(open-x)*ポイント。 OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE); } } } //---------------------------------------------------------------------------- void StepingPendings() { int ask, bid, open; 二重価格、損失、利益。 for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; if (OrderSymbol()!=Symbol())。 if (OrderType()==OP_BUYSTOP) { if (level_buy_stop==0) open=MathRound(OrderOpenPrice()/Point)。 if (open<=level_buy_stop) price=level_buy_stop*ポイント。 loss=price-StepStop*Point。 profit=0; if (TakeProfit>0) profit=price+TakeProfit*Point; OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE); } if (OrderType()==OP_SELLSTOP) { if (level_sell_stop==0) open=MathRound(OrderOpenPrice()/Point)。 if (open>=level_sell_stop) price=level_sell_stop*ポイント。 loss=price+StepStop*Pointとなります。 profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point; OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE); } } } //------------------------------------------------------------------- void SetBuyStop() { double lots=LotsCounting()。 double price=Bid+StepStop*Point; double loss=price-StepStop*Point。 double profit=0; if (TakeProfit>0) profit=price+TakeProfit*Point; int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,price,0,loss,profit,"",0,0,CLR_NONE); if (ticket<1) Print("Set a pending order failed with error #",GetLastError()," ",(GetLastError()).If (ticket<1) Print("GetLastError()","); }
void SetSellStop() { double lots=LotsCounting()。 double price=Ask-StepStop*Point; double loss=price+StepStop*Point。 double profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point; int ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,price,0,loss,profit,"",0,0,CLR_NONE); if (ticket<1) Print("Set a pending order failed with error #",GetLastError()," ",(GetLastError()).If (ticket<1) Print("GetLastError()","); }
int TotalBuy() { int count=0; for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; if (OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_BUY) count++; } を返す(カウント)。 }
int TotalBuyStop() { int count=0; for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; if (OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_BUYSTOP) count++; } を返す(カウント)。 }
int TotalSell() { int count=0; for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; if (OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_SELL) count++; } を返す(カウント)。 }
int TotalSellStop() { int count=0; for (int i=0; i<OrdersTotal(); i++) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; if (OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_SELLSTOP) count++; } を返す(カウント)。 }
double LotsCounting() { ダブルロット=ロット if (MoneyManagement) { double lotsize=MarketInfo(Symbol(),MODE_LOTSIZE); double freemargin=AccountFreeMargin()。 lots=0; if (lotsize>0) lots=NormalizeDouble((MarginPercent*freemargin/lotsize),1); } if (lots>10) lots=NormalizeDouble(lots,0); if (lots<0.01) lots=0.01; を返します(ロット)。 }
テストと最適化を行う場合、ほとんどの場合、1つの通貨ペアを使用し、許容できる利益を得て、ドローダウンを行います。そして、それを他の通貨でも繰り返す。しかし、最終的にExpert Advisorは、1つの取引口座から 私たちが興味を持っているすべての通貨を 取引する必要があります。通貨ごとに個別に得られるドローダウンよりも、期待される「トータル」でのドローダウンの方が良い場合があるそうです(この意見、何度かどこかで見たことがあります)。しかし、複数のExpert Advisorが同時に連敗を始めると、もっとひどいことになります。
このテーマについて、トレーダーの経験にも興味があります。 Seabossの非常に興味深いビデオクリップを紹介したいと思います。
http://taverno.livejournal.com/2010/04/10/ SeabossのTotal Equity ManagementはOmega用に実装されていますが、MT用にも同様の実装があるのでしょうか?
フォーラムメンバーの皆様、こんばんは。日中に問い合わせましたが、誰も反応してくれません。ターミナルウィンドウに縦の時間線を表示するインジケータが必要なのですが、きっと既製品があるのでしょう、どこで手に入るか教えてください。
おそらく返信がないのは、このようなインジケータを書くのは簡単なことで、おそらく誰も必要としないからでしょう。
vik-777:
この問題を解決するのを手伝ってください
ぜんいんとうた
for (int i=0; i<OrdersHistoryTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)
その後、マジックナンバーでフィルタリング
if (OrderMagicNumber()==12)
フィルタは3つのポジションにマッチするが、マジックナンバーで閉じた最後の1つだけが必要である。
最後の1枚だけ残す方法がわからないのですが?
ありがとうございました。
誰か助けてください。 誰もこのことに気づいていないのでしょうか?
OrderCloseTime() を使用すると便利です。
OrderCloseTime() を使用すると便利です。
だからなんだよ!最後に閉じた注文をマジックで探せばいいんだよ!OrderCloseTime()で複数の注文の比較をする方法を教えてくれ?
あまりにも下品でわかりにくい。もっと美しく、もっと饒舌に...。
ルーティートゥーでおでこに。もっとかわいく、もっと簡潔に...。
このテーマについて、トレーダーの経験にも興味があります。 Seabossの非常に興味深いビデオクリップを紹介したいと思います。
http://taverno.livejournal.com/2010/04/10/ SeabossはOmegaにEquity Managementを実装していますが、MTにも同様の実装があるのでしょうか?
以下は私が見つけたものです(まだ読んでいませんが、話題になっているようです)。
https://www.mql5.com/ru/forum/125825
Vopshchem私は確率論を取り、統計的に注文のマージンは価格から50ピップの半径になる場合は、10ピップの利益と開口部の順序で到達するのは簡単です - もある場合は10ピップのストップロス(でもスプレッドが問題ではない)トレンドの動きは素晴らしいことです...
StepStopに関係なく、ストップロスを追加する。
//+------------------------------------------------------------------+
//|Volfram.mq4|(株)エヌ・ティ・ティ・データ
//| Vova-x@list.ru |
//| |
//+------------------------------------------------------------------+
#property copyright"Vova-x@list.ru"
#プロパティリンク ""
//-----------------------------------------
extern TakeProfit=10;
extern int StepStop=45;
extern double Lots=0.01;
extern bool MoneyManagement=true;
extern inttern MarginPercent=10;
//-------------------------------------------
int level_sell_stop;
int level_buy_stop;
//----------------------------------------------------------
void init()
{
// int minstop=MarketInfo(Symbol(),MODE_STOPLEVEL);
//Print("levelbuy_stop: "+minstop;")
}
//-----------------------------------------------------------
void start()
{
if (!IsTradeAllowed()) return;
level_buy_stop=0;
level_sell_stop=0。
StepingStop()です。
StepingPendings()。
if (TotalBuy ()==0 && TotalBuyStop ()==0) SetBuyStop ();
if (TotalSell()==0 && TotalSellStop()==0) SetSellStop();
Comment("レベル買いストップ=",level_buy_stop*Point,
"閾値", "レベル売りの停止位置=", level_sell_stop*Point)。
}
//---------------------------------------------------------------------------------------------
void StepingStop()
{
if (StepStop<1) return;
int ask, bid, open, stop, x;
ダブル・ロス
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol())。
if (OrderType()==OP_BUY)
{
bid=MathRound(Bid/Point)。
open=MathRound(OrderOpenPrice()/Point)。
stop=MathRound(OrderStopLoss()/Point)。
x=(ビッド-オープン)/ステップストップ; x--; x*=ステップストップ。
level_sell_stop=open+x;
if (stop>=open+x)
loss=(open+x)*ポイント。
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE);
}
if (OrderType()==OP_SELL)
{
ask=MathRound(Ask/Point)。
open=MathRound(OrderOpenPrice()/Point)。
stop=MathRound(OrderStopLoss()/Point)。
x=(open-ask)/StepStop;x--;x*=StepStop。
level_buy_stop=open-x。
if (stop>0 && stop<=open-x)
loss=(open-x)*ポイント。
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE);
}
}
}
//----------------------------------------------------------------------------
void StepingPendings()
{
int ask, bid, open;
二重価格、損失、利益。
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol())。
if (OrderType()==OP_BUYSTOP)
{
if (level_buy_stop==0)
open=MathRound(OrderOpenPrice()/Point)。
if (open<=level_buy_stop)
price=level_buy_stop*ポイント。
loss=price-StepStop*Point。
profit=0; if (TakeProfit>0) profit=price+TakeProfit*Point;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE);
}
if (OrderType()==OP_SELLSTOP)
{
if (level_sell_stop==0)
open=MathRound(OrderOpenPrice()/Point)。
if (open>=level_sell_stop)
price=level_sell_stop*ポイント。
loss=price+StepStop*Pointとなります。
profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE);
}
}
}
//-------------------------------------------------------------------
void SetBuyStop()
{
double lots=LotsCounting()。
double price=Bid+StepStop*Point;
double loss=price-StepStop*Point。
double profit=0; if (TakeProfit>0) profit=price+TakeProfit*Point;
int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,price,0,loss,profit,"",0,0,CLR_NONE);
if (ticket<1) Print("Set a pending order failed with error #",GetLastError()," ",(GetLastError()).If (ticket<1) Print("GetLastError()",");
}
void SetSellStop()
{
double lots=LotsCounting()。
double price=Ask-StepStop*Point;
double loss=price+StepStop*Point。
double profit=0; if (TakeProfit>0) profit=price-TakeProfit*Point;
int ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,price,0,loss,profit,"",0,0,CLR_NONE);
if (ticket<1) Print("Set a pending order failed with error #",GetLastError()," ",(GetLastError()).If (ticket<1) Print("GetLastError()",");
}
int TotalBuy()
{
int count=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY) count++;
}
を返す(カウント)。
}
int TotalBuyStop()
{
int count=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUYSTOP) count++;
}
を返す(カウント)。
}
int TotalSell()
{
int count=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_SELL) count++;
}
を返す(カウント)。
}
int TotalSellStop()
{
int count=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_SELLSTOP) count++;
}
を返す(カウント)。
}
double LotsCounting()
{
ダブルロット=ロット
if (MoneyManagement)
{
double lotsize=MarketInfo(Symbol(),MODE_LOTSIZE);
double freemargin=AccountFreeMargin()。
lots=0; if (lotsize>0) lots=NormalizeDouble((MarginPercent*freemargin/lotsize),1);
}
if (lots>10) lots=NormalizeDouble(lots,0);
if (lots<0.01) lots=0.01;
を返します(ロット)。
}
// 終了