コーディングの方法は? - ページ 284 1...277278279280281282283284285286287288289290291...347 新しいコメント Beno 2012.01.02 15:08 #2831 時間フィルタの 解決策をソートしました 閉じる すべて 外部変数 extern string timefilter="Time Filter"; extern int gmtshift=1; // gmt offset of the broker extern bool generalfilter=false; // enable time filter extern int starthour=7; // start hour to trade after this hour extern int startminutes=0; // minutes of the start hour extern int endhour=21; // stop to trade after this hour extern int endminutes=0; // minutes of the start hour extern bool tradesunday=true; // trade on sunday extern bool fridayfilter=false; // enable special time filter on friday extern int fridayhour=21; // stop to trade after this hour extern int fridayminutes=0; // minutes of the friday hour [/CODE] int nstarthour,nendhour,nfridayhour; string istarthour,istartminutes,iendhour,iendminutes,ifridayhour,ifridayminutes; datetime tstart,tend,tfriday;[/CODE] Place Code in Start, [CODE] if(generalfilter){ nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24; if(nstarthour<10)istarthour="0"+nstarthour; if(nstarthour>9)istarthour=nstarthour; if(startminutes<10)istartminutes="0"+startminutes; if(startminutes>9)istartminutes=startminutes; tstart=StrToTime(istarthour+":"+istartminutes); nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24; if(endhour<10)iendhour="0"+nendhour; if(endhour>9)iendhour=nendhour; if(endminutes<10)iendminutes="0"+endminutes; if(endminutes>9)iendminutes=endminutes; tend=StrToTime(iendhour+":"+iendminutes); } if(fridayfilter){ nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24; if(nfridayhour<10)ifridayhour="0"+nfridayhour; if(nfridayhour>9)ifridayhour=nfridayhour; if(fridayminutes<10)ifridayminutes="0"+fridayminutes; if(fridayminutes>9)ifridayminutes=fridayminutes; tfriday=StrToTime(ifridayhour+":"+ifridayminutes); } if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend)) || (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday)) { CloseAll(); Comment("Non-trading Hours All Positions Closed"); return(0); } and the CloseAll function. [CODE] void CloseAll(){ int total = OrdersTotal(); for(int i=total-1;i>=0;i--){ OrderSelect(i, SELECT_BY_POS); int type = OrderType(); bool result = false; switch(type){ //Close opened long positions case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Lime); break; //Close opened short positions case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, LightGreen ); } if(result == false){ Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() ); Sleep(3000); } } return(0); } Kalenzoさん、ヒントありがとうございました。 How to code? MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 Aggressive scalp ea Beno 2012.01.02 17:11 #2832 ストップロス こんにちは 私は、取引ごとのティックバリュー、最大ddとパーセンテージに基づいてSLを計算するための実験を試みています。 double lotSize = NormalizeDouble(Kellylot(),2); double Pip = Point; if(Digits==3 || Digits==5) Pip = 10*Point; double Bal = AccountBalance(); // $1000 double TV = MarketInfo(Symbol(), MODE_TICKVALUE); // $1 double Risk = 2; // 2% double MaxDD = 10; // 10% double RiskCapital = Bal*MaxDD/100; // Total Exposure 10% of $1000 = $100 double RPT = Bal*Risk/100; // 2% of $1000 = $20 double stopLoss = NormalizeDouble(RPT/TV*lotSize/Pip,Digits); //$20/1*0.01/10 = 0.02000 double Positions = MathAbs(RiskCapital/RPT); // Maximum 5 positions 100 / 20 このアイデアは、ペアとペアの個々のtickvalueとロットサイズに応じて、2%のSLを設定することができるというものです。 私はそれが正しいと思うが、可能であれば、誰かがそれをチェック することを望む。 How to code? コーディングのヘルプが必要 コーディングのヘルプ Kale 2012.01.03 07:13 #2833 Beno: こんにちは 私は、tickvalueと最大ddと取引ごとの割合に基づいてSLを計算するための実験を試みています。 double lotSize = NormalizeDouble(Kellylot(),2); double Pip = Point; if(Digits==3 || Digits==5) Pip = 10*Point; double Bal = AccountBalance(); // $1000 double TV = MarketInfo(Symbol(), MODE_TICKVALUE); // $1 double Risk = 2; // 2% double MaxDD = 10; // 10% double RiskCapital = Bal*MaxDD/100; // Total Exposure 10% of $1000 = $100 double RPT = Bal*Risk/100; // 2% of $1000 = $20 double stopLoss = NormalizeDouble(RPT/TV*lotSize/Pip,Digits); //$20/1*0.01/10 = 0.02000 double Positions = MathAbs(RiskCapital/RPT); // Maximum 5 positions 100 / 20 このアイデアは、ペアとペアの個々のtickvalueとロットサイズに応じて、2%のSLを設定することができるということです。 私はその通りだと思いますが、可能であれば誰かにチェックしてもらいたいと思います。 Benoはよくやった。 魚よりも釣竿を与えた方がいいに決まってます。コメントでお役に立てたようで、とてもうれしいです。 ストップロス については、アイデアは良いのですが、逆の発想も試してみてください。 まず、ストップロスを設定します。 次にトレードサイズを設定します。 この方法では、システムのエントリー/エグジットが市場の状況に適合し、口座からX%以上のリスクを取ることはありませんが、エグジットはリスクの割合ではなく、システムのロジックに依存することになります。 Beno 2012.01.03 21:17 #2834 Kalenzo: Benoさん、お疲れ様です。魚より釣竿を贈るのが常です。コメントでお役に立てたようで、とてもうれしいです。 ストップロスについては、アイデアは良いのですが、逆の発想も試してみてください。 まず、ストップロスを設定します。 次にトレードサイズを設定します。 この方法では、システムの入口と出口を市場の状況に合わせ、口座からX%以上のリスクを取らずに、出口はリスクの割合ではなく、システムのロジックに依存します。 こんにちは、Kalenzoです。 デモ口座とライブ口座でEAを使用したところ、Error openingSELL order: invalid stopsというエラーが発生し、トレードが開始されません。 EURUSD,Daily: modify #1 buy 0.01 EURUSD at 1.43348 sl: 1.43895 tp: 0.00000 ok SLの0.00547ポイント差 を確認しました。 モード_freezelevel 0.0000を モード_ストプレレベル0.0000 double lotSize = NormalizeDouble(Kellylot(),2); double Bal = AccountFreeMargin(); double TV = MarketInfo(Symbol(), MODE_TICKVALUE); double Risk = 0.3; double MaxDD = 10; double RiskCapital = Bal*MaxDD/100; double RPT = Bal*Risk/100; double stopLoss = NormalizeDouble((RPT/TV)*lotSize/pips2dbl,Digits); double Positions = MathAbs(RiskCapital/RPT); double SL; //---- sell conditions if(sellsig && ttime!=Time[0]){ double bid = NormalizeDouble(Bid, Digits); SL = NormalizeDouble(Bid + stopLoss * pips2dbl, Digits); res=OrderSend(symbol,OP_SELL,lotSize,bid,slippage * pips2dbl,SL,0,"Pivot_Sell",SpecificMagic,0,Red); if( res<0 ) { Print("Error opening SELL order : ",ErrorDescription(GetLastError())); Print("Bid=" + DoubleToStr(bid,Digits) + " : SL=" + DoubleToStr(SL,Digits)); res=0; } else //now enter in the SL and TP via OrderModify to make compatible with ECN broker { if (OrderSelect(res, SELECT_BY_TICKET)) { if (!OrderModify(res, Bid, SL, 0, 0, Red)) Print("Error modifying order"); } } ttime=Time[0]; return; } //---- buy conditions if(buysig && ttime!=Time[0]) { double ask = NormalizeDouble(Ask, Digits); SL = NormalizeDouble(Ask - stopLoss * pips2dbl, Digits); res=OrderSend(symbol,OP_BUY,lotSize,ask,slippage * pips2dbl,SL,0,"Pivot Buy",SpecificMagic,0,Blue); if( res<0 ) { Print("Error opening BUY order : ",ErrorDescription(GetLastError())); Print("Ask=" + DoubleToStr(ask,Digits) + " : SL=" + DoubleToStr(SL,Digits)); res=0; } else //now enter in the SL and TP via OrderModify to make compatible with ECN broker { if (OrderSelect(res, SELECT_BY_TICKET)) { if (!OrderModify(res, Ask, SL, 0, 0, Blue)) Print("Error modifying order"); } } ttime=Time[0]; return; } } 私は前にこれを遭遇したことがない。 乾杯 Beno How to code? Unknown ticket for OrderModify [ARCHIVE!] Any rookie question, cmfxtrader 2012.01.03 21:50 #2835 ラッチ/アンラッチ機能 mq4でラッチ/アンラッチ関数をコード化する方法はありますか? ある条件に基づいて真のビットをラッチし、別の条件によってラッチが解除されるまでこの値を保存します。 cmfxtrader Kale 2012.01.04 06:34 #2836 Beno: こんにちは、カレンゾです。EAがデモとライブ口座にあり、取引が開始されないのに、Error opening SELL order : invalid stopsと表示されます。 EURUSD,Daily: modify #1 buy 0.01 EURUSD at 1.43348 sl: 1.43895 tp: 0.00000 ok SLの0.00547ポイント差 を確認しました。 モード_freezelevel 0.0000を モード_ストプレレベル0.0000 double lotSize = NormalizeDouble(Kellylot(),2); double Bal = AccountFreeMargin(); double TV = MarketInfo(Symbol(), MODE_TICKVALUE); double Risk = 0.3; double MaxDD = 10; double RiskCapital = Bal*MaxDD/100; double RPT = Bal*Risk/100; double stopLoss = NormalizeDouble((RPT/TV)*lotSize/pips2dbl,Digits); double Positions = MathAbs(RiskCapital/RPT); double SL; //---- sell conditions if(sellsig && ttime!=Time[0]){ double bid = NormalizeDouble(Bid, Digits); SL = NormalizeDouble(Bid + stopLoss * pips2dbl, Digits); res=OrderSend(symbol,OP_SELL,lotSize,bid,slippage * pips2dbl,SL,0,"Pivot_Sell",SpecificMagic,0,Red); if( res<0 ) { Print("Error opening SELL order : ",ErrorDescription(GetLastError())); Print("Bid=" + DoubleToStr(bid,Digits) + " : SL=" + DoubleToStr(SL,Digits)); res=0; } else //now enter in the SL and TP via OrderModify to make compatible with ECN broker { if (OrderSelect(res, SELECT_BY_TICKET)) { if (!OrderModify(res, Bid, SL, 0, 0, Red)) Print("Error modifying order"); } } ttime=Time[0]; return; } //---- buy conditions if(buysig && ttime!=Time[0]) { double ask = NormalizeDouble(Ask, Digits); SL = NormalizeDouble(Ask - stopLoss * pips2dbl, Digits); res=OrderSend(symbol,OP_BUY,lotSize,ask,slippage * pips2dbl,SL,0,"Pivot Buy",SpecificMagic,0,Blue); if( res<0 ) { Print("Error opening BUY order : ",ErrorDescription(GetLastError())); Print("Ask=" + DoubleToStr(ask,Digits) + " : SL=" + DoubleToStr(SL,Digits)); res=0; } else //now enter in the SL and TP via OrderModify to make compatible with ECN broker { if (OrderSelect(res, SELECT_BY_TICKET)) { if (!OrderModify(res, Ask, SL, 0, 0, Blue)) Print("Error modifying order"); } } ttime=Time[0]; return; } } 私は前にこれを遭遇したことがない。 乾杯 ベノ ストップロスが近すぎる可能性があります。ストップロスの 値を10倍にしてみてください。4桁のブローカーでシステムをテストし、5桁のブローカーで取引しているときによくある問題です。5桁のブローカーでテストすることもできますが、ブローカーに接続しない(オフラインモードで)場合、メタトレーダーは(4桁の)古い設定になってしまいます。 まずこの行から。 NormalizeDouble(Ask - stopLoss * pips2dbl, Digits); この値 => stopLoss*pips2dbl を表示します。 とすれば、ストップロスの実際の値が分かります。 もしこの値が20や10であれば、ポイント値を乗じる必要があることを意味します。 NormalizeDouble(Ask - (stopLoss * pips2dbl) *Point, Digits); もし0.00009であれば、0.0009になるはずなので、10倍する必要があります(もちろん9ピップのストップロスを設定したい場合)。 Kale 2012.01.04 06:39 #2837 cmfxtrader: mq4でラッチ/アンラッチ関数をコーディングする方法はありますか? ある条件に基づいて真のビットをラッチし、別の条件によってラッチが解除されるまでこの値を保存します。 よくわからないのですが、どのようなことでしょうか?eaの特定の部分(機能)をON/OFFしたいのか、ea Bの動作でea Aの機能を停止させたいのか?どちらも可能です。 ExForX 2012.01.06 15:23 #2838 貨幣価値から価格への変換(利益目標計算用) バスケット取引で指定された利益目標に対する価格値を返す関数をプログラミングしたいのですが、なかなかうまくいきません。私が到達したい目標、それは利益目標を示す画面上に描かれる単純な水平線 です。しかし、利益目標は価格値ではなく、金銭的な値の形でユーザーが定義可能な変数です。(例: target = 1.2000 の代わりに target = € 100) 私がこれまでに持っているルーチン。 (私の口座はユーロ建てです!) 1) USDJPYのいくつかの買いポジションを開くとします(例の状況を作るためにランダムなポジションで)。 2) バスケットの平均オープン価格(1.1500とします、これも仮に)を計算し、これを示す水平線を表示します。 3) 利益目標を設定した変数があります:目標= € 100とします。 4) バスケットプロフィット >= ターゲットのとき、すべてのオープンポジションを正常にクローズすることができます。 その中間のステップがありません。double targetPrice(){}という関数が必要で、これはtargetPriceを返します。水平線を引くことが問題なのではありません。 targetPrice = 平均オープンプライス + マネーバリュー-ターゲット (€100) つまり、私が知りたいのは、money-valueをpipsに変換する方法 です。この方法で平均価格にpipsを追加し、ターゲット価格を得ることができます。これは、私がEUR口座を持っていて、USDJPYを取引しているという事実を考慮しなければならないことも覚えておいてください。このような落とし穴もあるのでしょうか? How to code? Beno 2012.01.06 22:11 #2839 ECN SLが動作しない ギドデイ 私はECN上で動作するEAをセットアップしようとしています、私はSLとTPが配置/変更されなければならないことを理解し、私はセットアップが正しいと思います、注文は今開くが、SLは配置されていない extern double StopLoss = 100; 任意の助けは素晴らしいことでしょう。 //---- buy conditions if(buysig && ttime!=Time[0]) { ticket = OrderSend(Symbol(), OP_BUY, lotSize, MarketInfo(Symbol(), MODE_ASK), 2, 0, 0, "", 12345); if(ticket > -1){ if (!OrderSelect(ticket, SELECT_BY_TICKET)) { error_code = GetLastError(); Print("Error: " + ErrorDescription(error_code)); return(-1); } Print("order "+ticket+" successfully opened"); //now enter in the SL and TP via OrderModify to make compatible with ECN broker SL = MarketInfo(Symbol(), MODE_ASK) - (StopLoss * pips2points); Print("Ask = " + DoubleToStr(Ask,Digits) + " : SL = " + DoubleToStr(SL,Digits)); //round to nearest Tickvalue SL = DoubleRound(SL, MarketInfo(Symbol(), MODE_TICKSIZE)); Print("SL rounded: " + SL); if(!OrderModify(ticket, entry_price, SL, 0, Blue)) { error_code = GetLastError(); Print("Error: " + ErrorDescription(error_code)); return(-1); } Print("Stoploss successfully set"); ttime=Time[0]; return(0); } } } //Tickvalue Rounding double DoubleRound(double number, double step){ double mod = MathMod(number, step); if(mod < step/2.0) step = 0; double rounded = number - mod + step; return (rounded); } How to code? MQL4 Learning Automated Trading Championship 2007: bnbb2004 2012.01.07 19:53 #2840 ,,,,,,,,,,,,,.,,,,,,,,, ファイル: test_ea.txt 10 kb aizig.ex4 10 kb 1...277278279280281282283284285286287288289290291...347 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
時間フィルタの 解決策をソートしました 閉じる すべて
外部変数
extern string timefilter="Time Filter";
extern int gmtshift=1; // gmt offset of the broker
extern bool generalfilter=false; // enable time filter
extern int starthour=7; // start hour to trade after this hour
extern int startminutes=0; // minutes of the start hour
extern int endhour=21; // stop to trade after this hour
extern int endminutes=0; // minutes of the start hour
extern bool tradesunday=true; // trade on sunday
extern bool fridayfilter=false; // enable special time filter on friday
extern int fridayhour=21; // stop to trade after this hour
extern int fridayminutes=0; // minutes of the friday hour
[/CODE]
string istarthour,istartminutes,iendhour,iendminutes,ifridayhour,ifridayminutes;
datetime tstart,tend,tfriday;[/CODE]
Place Code in Start,
[CODE] if(generalfilter){
nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;
if(nstarthour<10)istarthour="0"+nstarthour;
if(nstarthour>9)istarthour=nstarthour;
if(startminutes<10)istartminutes="0"+startminutes;
if(startminutes>9)istartminutes=startminutes;
tstart=StrToTime(istarthour+":"+istartminutes);
nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;
if(endhour<10)iendhour="0"+nendhour;
if(endhour>9)iendhour=nendhour;
if(endminutes<10)iendminutes="0"+endminutes;
if(endminutes>9)iendminutes=endminutes;
tend=StrToTime(iendhour+":"+iendminutes);
}
if(fridayfilter){
nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;
if(nfridayhour<10)ifridayhour="0"+nfridayhour;
if(nfridayhour>9)ifridayhour=nfridayhour;
if(fridayminutes<10)ifridayminutes="0"+fridayminutes;
if(fridayminutes>9)ifridayminutes=fridayminutes;
tfriday=StrToTime(ifridayhour+":"+ifridayminutes);
}
if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))
|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))
{
CloseAll();
Comment("Non-trading Hours All Positions Closed");
return(0);
}and the CloseAll function.
[CODE]
void CloseAll(){
int total = OrdersTotal();
for(int i=total-1;i>=0;i--){
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
bool result = false;
switch(type){
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Lime); break;
//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, LightGreen );
} if(result == false){
Alert("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
Sleep(3000);
}
}
return(0);
}
Kalenzoさん、ヒントありがとうございました。
ストップロス
こんにちは
私は、取引ごとのティックバリュー、最大ddとパーセンテージに基づいてSLを計算するための実験を試みています。
double lotSize = NormalizeDouble(Kellylot(),2);
double Pip = Point;
if(Digits==3 || Digits==5) Pip = 10*Point;
double Bal = AccountBalance(); // $1000
double TV = MarketInfo(Symbol(), MODE_TICKVALUE); // $1
double Risk = 2; // 2%
double MaxDD = 10; // 10%
double RiskCapital = Bal*MaxDD/100; // Total Exposure 10% of $1000 = $100
double RPT = Bal*Risk/100; // 2% of $1000 = $20
double stopLoss = NormalizeDouble(RPT/TV*lotSize/Pip,Digits); //$20/1*0.01/10 = 0.02000
double Positions = MathAbs(RiskCapital/RPT); // Maximum 5 positions 100 / 20
このアイデアは、ペアとペアの個々のtickvalueとロットサイズに応じて、2%のSLを設定することができるというものです。
私はそれが正しいと思うが、可能であれば、誰かがそれをチェック することを望む。
こんにちは
私は、tickvalueと最大ddと取引ごとの割合に基づいてSLを計算するための実験を試みています。
double lotSize = NormalizeDouble(Kellylot(),2);
double Pip = Point;
if(Digits==3 || Digits==5) Pip = 10*Point;
double Bal = AccountBalance(); // $1000
double TV = MarketInfo(Symbol(), MODE_TICKVALUE); // $1
double Risk = 2; // 2%
double MaxDD = 10; // 10%
double RiskCapital = Bal*MaxDD/100; // Total Exposure 10% of $1000 = $100
double RPT = Bal*Risk/100; // 2% of $1000 = $20
double stopLoss = NormalizeDouble(RPT/TV*lotSize/Pip,Digits); //$20/1*0.01/10 = 0.02000
double Positions = MathAbs(RiskCapital/RPT); // Maximum 5 positions 100 / 20
このアイデアは、ペアとペアの個々のtickvalueとロットサイズに応じて、2%のSLを設定することができるということです。
私はその通りだと思いますが、可能であれば誰かにチェックしてもらいたいと思います。Benoはよくやった。
魚よりも釣竿を与えた方がいいに決まってます。コメントでお役に立てたようで、とてもうれしいです。
ストップロス については、アイデアは良いのですが、逆の発想も試してみてください。
まず、ストップロスを設定します。
次にトレードサイズを設定します。
この方法では、システムのエントリー/エグジットが市場の状況に適合し、口座からX%以上のリスクを取ることはありませんが、エグジットはリスクの割合ではなく、システムのロジックに依存することになります。
Benoさん、お疲れ様です。
魚より釣竿を贈るのが常です。コメントでお役に立てたようで、とてもうれしいです。
ストップロスについては、アイデアは良いのですが、逆の発想も試してみてください。
まず、ストップロスを設定します。
次にトレードサイズを設定します。
この方法では、システムの入口と出口を市場の状況に合わせ、口座からX%以上のリスクを取らずに、出口はリスクの割合ではなく、システムのロジックに依存します。こんにちは、Kalenzoです。
デモ口座とライブ口座でEAを使用したところ、Error openingSELL order: invalid stopsというエラーが発生し、トレードが開始されません。
EURUSD,Daily: modify #1 buy 0.01 EURUSD at 1.43348 sl: 1.43895 tp: 0.00000 ok
SLの0.00547ポイント差
を確認しました。
モード_freezelevel 0.0000を
モード_ストプレレベル0.0000
double Bal = AccountFreeMargin();
double TV = MarketInfo(Symbol(), MODE_TICKVALUE);
double Risk = 0.3;
double MaxDD = 10;
double RiskCapital = Bal*MaxDD/100;
double RPT = Bal*Risk/100;
double stopLoss = NormalizeDouble((RPT/TV)*lotSize/pips2dbl,Digits);
double Positions = MathAbs(RiskCapital/RPT);
double SL;
//---- sell conditions
if(sellsig && ttime!=Time[0]){
double bid = NormalizeDouble(Bid, Digits);
SL = NormalizeDouble(Bid + stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_SELL,lotSize,bid,slippage * pips2dbl,SL,0,"Pivot_Sell",SpecificMagic,0,Red);
if( res<0 )
{
Print("Error opening SELL order : ",ErrorDescription(GetLastError()));
Print("Bid=" + DoubleToStr(bid,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Bid, SL, 0, 0, Red))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
//---- buy conditions
if(buysig && ttime!=Time[0]) {
double ask = NormalizeDouble(Ask, Digits);
SL = NormalizeDouble(Ask - stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_BUY,lotSize,ask,slippage * pips2dbl,SL,0,"Pivot Buy",SpecificMagic,0,Blue);
if( res<0 )
{
Print("Error opening BUY order : ",ErrorDescription(GetLastError()));
Print("Ask=" + DoubleToStr(ask,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Ask, SL, 0, 0, Blue))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
}私は前にこれを遭遇したことがない。
乾杯
Beno
ラッチ/アンラッチ機能
mq4でラッチ/アンラッチ関数をコード化する方法はありますか? ある条件に基づいて真のビットをラッチし、別の条件によってラッチが解除されるまでこの値を保存します。
cmfxtrader
こんにちは、カレンゾです。
EAがデモとライブ口座にあり、取引が開始されないのに、Error opening SELL order : invalid stopsと表示されます。
EURUSD,Daily: modify #1 buy 0.01 EURUSD at 1.43348 sl: 1.43895 tp: 0.00000 ok
SLの0.00547ポイント差
を確認しました。
モード_freezelevel 0.0000を
モード_ストプレレベル0.0000
double Bal = AccountFreeMargin();
double TV = MarketInfo(Symbol(), MODE_TICKVALUE);
double Risk = 0.3;
double MaxDD = 10;
double RiskCapital = Bal*MaxDD/100;
double RPT = Bal*Risk/100;
double stopLoss = NormalizeDouble((RPT/TV)*lotSize/pips2dbl,Digits);
double Positions = MathAbs(RiskCapital/RPT);
double SL;
//---- sell conditions
if(sellsig && ttime!=Time[0]){
double bid = NormalizeDouble(Bid, Digits);
SL = NormalizeDouble(Bid + stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_SELL,lotSize,bid,slippage * pips2dbl,SL,0,"Pivot_Sell",SpecificMagic,0,Red);
if( res<0 )
{
Print("Error opening SELL order : ",ErrorDescription(GetLastError()));
Print("Bid=" + DoubleToStr(bid,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Bid, SL, 0, 0, Red))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
//---- buy conditions
if(buysig && ttime!=Time[0]) {
double ask = NormalizeDouble(Ask, Digits);
SL = NormalizeDouble(Ask - stopLoss * pips2dbl, Digits);
res=OrderSend(symbol,OP_BUY,lotSize,ask,slippage * pips2dbl,SL,0,"Pivot Buy",SpecificMagic,0,Blue);
if( res<0 )
{
Print("Error opening BUY order : ",ErrorDescription(GetLastError()));
Print("Ask=" + DoubleToStr(ask,Digits) + " : SL=" + DoubleToStr(SL,Digits));
res=0;
}
else //now enter in the SL and TP via OrderModify to make compatible with ECN broker
{
if (OrderSelect(res, SELECT_BY_TICKET))
{
if (!OrderModify(res, Ask, SL, 0, 0, Blue))
Print("Error modifying order");
}
}
ttime=Time[0];
return;
}
}私は前にこれを遭遇したことがない。
乾杯
ベノストップロスが近すぎる可能性があります。ストップロスの 値を10倍にしてみてください。4桁のブローカーでシステムをテストし、5桁のブローカーで取引しているときによくある問題です。5桁のブローカーでテストすることもできますが、ブローカーに接続しない(オフラインモードで)場合、メタトレーダーは(4桁の)古い設定になってしまいます。
まずこの行から。
NormalizeDouble(Ask - stopLoss * pips2dbl, Digits);
この値 => stopLoss*pips2dbl を表示します。
とすれば、ストップロスの実際の値が分かります。
もしこの値が20や10であれば、ポイント値を乗じる必要があることを意味します。
NormalizeDouble(Ask - (stopLoss * pips2dbl) *Point, Digits);
もし0.00009であれば、0.0009になるはずなので、10倍する必要があります(もちろん9ピップのストップロスを設定したい場合)。
mq4でラッチ/アンラッチ関数をコーディングする方法はありますか? ある条件に基づいて真のビットをラッチし、別の条件によってラッチが解除されるまでこの値を保存します。
よくわからないのですが、どのようなことでしょうか?eaの特定の部分(機能)をON/OFFしたいのか、ea Bの動作でea Aの機能を停止させたいのか?どちらも可能です。
貨幣価値から価格への変換(利益目標計算用)
バスケット取引で指定された利益目標に対する価格値を返す関数をプログラミングしたいのですが、なかなかうまくいきません。私が到達したい目標、それは利益目標を示す画面上に描かれる単純な水平線 です。しかし、利益目標は価格値ではなく、金銭的な値の形でユーザーが定義可能な変数です。(例: target = 1.2000 の代わりに target = € 100)
私がこれまでに持っているルーチン。
(私の口座はユーロ建てです!)
1) USDJPYのいくつかの買いポジションを開くとします(例の状況を作るためにランダムなポジションで)。
2) バスケットの平均オープン価格(1.1500とします、これも仮に)を計算し、これを示す水平線を表示します。
3) 利益目標を設定した変数があります:目標= € 100とします。
4) バスケットプロフィット >= ターゲットのとき、すべてのオープンポジションを正常にクローズすることができます。
その中間のステップがありません。double targetPrice(){}という関数が必要で、これはtargetPriceを返します。水平線を引くことが問題なのではありません。
targetPrice = 平均オープンプライス + マネーバリュー-ターゲット (€100)
つまり、私が知りたいのは、money-valueをpipsに変換する方法 です。この方法で平均価格にpipsを追加し、ターゲット価格を得ることができます。これは、私がEUR口座を持っていて、USDJPYを取引しているという事実を考慮しなければならないことも覚えておいてください。このような落とし穴もあるのでしょうか?
ECN SLが動作しない
ギドデイ
私はECN上で動作するEAをセットアップしようとしています、私はSLとTPが配置/変更されなければならないことを理解し、私はセットアップが正しいと思います、注文は今開くが、SLは配置されていない extern double StopLoss = 100; 任意の助けは素晴らしいことでしょう。
if(buysig && ttime!=Time[0]) {
ticket = OrderSend(Symbol(), OP_BUY, lotSize, MarketInfo(Symbol(), MODE_ASK), 2, 0, 0, "", 12345);
if(ticket > -1){
if (!OrderSelect(ticket, SELECT_BY_TICKET)) {
error_code = GetLastError();
Print("Error: " + ErrorDescription(error_code));
return(-1);
}
Print("order "+ticket+" successfully opened");
//now enter in the SL and TP via OrderModify to make compatible with ECN broker
SL = MarketInfo(Symbol(), MODE_ASK) - (StopLoss * pips2points);
Print("Ask = " + DoubleToStr(Ask,Digits) + " : SL = " + DoubleToStr(SL,Digits));
//round to nearest Tickvalue
SL = DoubleRound(SL, MarketInfo(Symbol(), MODE_TICKSIZE));
Print("SL rounded: " + SL);
if(!OrderModify(ticket, entry_price, SL, 0, Blue)) {
error_code = GetLastError();
Print("Error: " + ErrorDescription(error_code));
return(-1);
}
Print("Stoploss successfully set");
ttime=Time[0];
return(0);
}
}
}
//Tickvalue Rounding
double DoubleRound(double number, double step){
double mod = MathMod(number, step);
if(mod < step/2.0)
step = 0;
double rounded = number - mod + step;
return (rounded);
},,,,,,,,,,,,,.,,,,,,,,,