2EMAのクロスEAを作成したのですが、アドバイスが必要です。 - ページ 3 1234 新しいコメント 削除済み 2013.12.20 13:20 #21 deVries: 現在のスプレッドでテストした場合、これは非常にクレイジーな動きをしているので、スプレッドは非常に大きくなる可能性があります。 どのようにテストしたのですか? 固定スプレッドか現在のスプレッドか? OK、この時こそ「スプレッド」でググってみよう。 私のくだらない質問に答えてくれてありがとうございます)) 私はしばらくして戻ってきます。 Simon Gniadkowski 2013.12.20 14:16 #22 prupru: そうそう、こういう時こそ "拡散 "でググりましょう。 私のくだらない質問に答えてくれて感謝します)) しばらくしたらまた来ます スプレッド = アスク - ビッド Tjipke de Vries 2013.12.20 15:41 #23 そして、この値は刻々と変化することができる なぜかというと、このテストはどのように行われたのか、その方法を尋ねたからです。 削除済み 2013.12.21 07:58 #24 deVries: そして、この値は刻々と変化することができる というわけで、このテストはどのように行われたのでしょうか? その通りです。 私は、違いは、現在のスプレッドのテストのためだった、私は固定スプレッドでテストを実行したとき、彼らはまったく同じだった! 本当にありがとうございました。 本当にありがとうございました。 また、コードに何か改善すべき点があれば教えてください。 Tjipke de Vries 2013.12.21 10:57 #25 prupru: ということです。 私は、この違いは現在のスプレッドのテストによるもので、固定スプレッドでテストを行ったところ、全く同じでした 本当にありがとうございました。 本当にありがとうございました。 また、コードに何か改善すべき点があれば教えてください。 あなたのコードが今どうなっているかを示せば 新しいエラーハンドリングも見てみたいので、コメントRaptorUKhttps://www.mql5.com/en/forum/148529 を参照してください。 削除済み 2013.12.21 11:35 #26 deVries: あなたはあなたのコードが今になっているものを示す場合 新しいエラーハンドリングも見てみたい方は、コメント RaptorUKhttps://www.mql5.com/en/forum/148529 を参照してください。 よし、これで行こう。 #property copyright "me" #property link "killnosock.net" extern int SlowEma = 21; extern int FastEma = 10; extern int MaxRisk = 100;// % of Depo to be traded per order extern int TakeProfit=0; extern int StopLoss=0; extern int TrailingStop=0; extern int Slippage = 10; extern double MinDiff = 0.002; int LastBars = 0; //0 - undefined, 1 - bullish cross (fast MA above slow MA), -1 - bearish cross (fast MA below slow MA) int PrevCross = 0; int init(){return(0);} int deinit() {return(0);} 価格の正規化。 double NormPrice(double g_price) { return (NormalizeDouble(g_price,MarketInfo(Symbol(),MODE_DIGITS))); } GetLot関数、私はそれが変更されていないと思います。 //function GetLot, get size of the lot according to MaxRisk double GetLot(int Risk) {double Free =AccountFreeMargin(); double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); double Lot =MathFloor(Free*Risk/100/One_Lot/Step)*Step; if(Lot<Min_Lot) Lot=Min_Lot; if(Lot>Max_Lot) Lot=Max_Lot; if(Lot*One_Lot>Free) { Alert(" free= ", AccountFreeMargin()," for one lot= ", MarketInfo(Symbol(),MODE_MARGINREQUIRED)," lot= ", Lot); return(0.0);} return(Lot);} 新しい注文機能で、正規化された価格を使用するようになりました。 //function NewOrder, place new order int NewOrder(int Cmd,double Lot) {double TP=0; //тейкпрофит double SL=0; //стоплосс double PR=0; //Цена color clr = CLR_NONE; while(!IsTradeAllowed()) Sleep(10); RefreshRates(); if(Cmd==OP_BUY) {PR=Ask; if(TakeProfit>0) TP=NormPrice(Ask + Ask*TakeProfit/100); if(StopLoss>0) SL=NormPrice(Ask - Ask*StopLoss/100); if(SL<0) SL = 0; if(TP<0) TP = 0; clr = Green;} if(Cmd==OP_SELL) {PR=Bid; if(TakeProfit>0) TP=NormPrice(Bid - Bid*TakeProfit/100); if(StopLoss>0) SL=NormPrice(Bid + Bid*StopLoss/100); if(SL<0) SL = 0; if(TP<0) TP = 0; clr=Red;} int tic=OrderSend(Symbol(),Cmd,Lot,PR,Slippage,SL,TP,"",0,0,clr); if(tic<0) { Print("open order error:",GetLastError()); Print("cmd ", Cmd, " Lot ", Lot, " PR ", PR, " Slip ", Slippage, " SL ", SL, " TP ", TP, " Ask ", Ask, " Bid ", Bid); } return(tic);} 1またはすべての注文を閉じる 私は1つのシンボルだけで、1つのアカウントに1つのEAで取引するつもりなので、シンボルとマジックナンバーをチェックするために注文のクローズ機能を変更していません。しかし、他の重要な問題やチューニングに対処した後に行うつもりです。 //CloseOrder void CloseOrder() {double PR=0; while(!IsTradeAllowed()) Sleep(10); RefreshRates(); if(OrderType()==OP_BUY) PR=Bid; if(OrderType()==OP_SELL) PR=Ask; if(!OrderClose(OrderTicket(),OrderLots(),PR,Slippage,CLR_NONE)) { Print("Close order error: ",GetLastError()); Print("Type ", OrderType()," PR ",PR, " Ask ", Ask, " Bid ", Bid, " OrderTicket ", OrderTicket(), " OrderLots ", OrderLots()); } return;} //--------------------------- end of close order //Close all Orders void CloseAllOrders() { for(int i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { CloseOrder(); } return;} EMAのクロス検出をEmaDiff[2]とEmaDiff[1]の比較からEmaDiff[0]とゼロの比較に変更し、追加フラグを使用しました(すべて私が見つけたいくつかの例から来るものです)。 分スケールのデモ口座では、スプレッドが買い取引はEMAが交差させ、その後、同じ分バー内でその後に来る売り取引は、再びそれらを分離させるように高いときに偽のトリガーを作る。 [url=http://postimg.org/image/udq4ufmqf/][img]http://s15.postimg.org/udq4ufmqf/mess.jpg[/img][/url] 今、この対処法を考えているところです // check cross void CheckCross() { double FMA_Current = iMA(Symbol(),0,FastEma,0,MODE_EMA,PRICE_CLOSE,0); double SMA_Current = iMA(Symbol(),0,SlowEma,0,MODE_EMA,PRICE_CLOSE,0); double Poin = (FMA_Current + SMA_Current)/2; double Lot; if (PrevCross == 0) //Was undefined { if ((FMA_Current - SMA_Current) >= MinDiff * Poin) PrevCross = 1; //Bullish state else if ((SMA_Current - FMA_Current) >= MinDiff * Poin) PrevCross = -1; //Bearish state return; } else if (PrevCross == 1) //Was bullish { if ((SMA_Current - FMA_Current) >= MinDiff * Poin) //Became bearish { CloseAllOrders(); Lot = GetLot(MaxRisk); NewOrder(OP_SELL,Lot); PrevCross = -1; } } else if (PrevCross == -1) //Was bearish { if ((FMA_Current - SMA_Current) >= MinDiff * Poin) //Became bullish { CloseAllOrders(); Lot = GetLot(MaxRisk); NewOrder(OP_BUY,Lot); PrevCross = 1; } } } トレーリングストップ機能の // trailing stop void DoTrailing() { int total = OrdersTotal(); for (int pos = 0; pos < total; pos++) { if (OrderSelect(pos, SELECT_BY_POS) == false) continue; if (OrderSymbol() == Symbol()) { if (OrderType() == OP_BUY) { RefreshRates(); if (Bid - OrderOpenPrice() >= TrailingStop * Bid/100) //If profit is greater or equal to the desired Trailing Stop value { if (OrderStopLoss() < (Bid - TrailingStop * Bid/100)) //If the current stop-loss is below the desired trailing stop level OrderModify(OrderTicket(), OrderOpenPrice(), NormPrice(Bid - TrailingStop * Bid/100), OrderTakeProfit(), 0); } } else if (OrderType() == OP_SELL) { RefreshRates(); if (OrderOpenPrice() - Ask >= TrailingStop * Ask/100) //If profit is greater or equal to the desired Trailing Stop value { if ((OrderStopLoss() > (Ask + TrailingStop * Ask/100)) || (OrderStopLoss() == 0)) //If the current stop-loss is below the desired trailing stop level OrderModify(OrderTicket(), OrderOpenPrice(), NormPrice(Ask + TrailingStop * Ask/100), OrderTakeProfit(), 0); } } } } } と本体そのものです。 //main program int start() { if (TrailingStop > 0) DoTrailing(); static datetime Time0; if (Time0 == Time[0]) return; Time0 = Time[0]; { CheckCross(); } return(0); } ご関心をお寄せいただきありがとうございます Tjipke de Vries 2013.12.21 12:44 #27 prupru:シンボルやマジックナンバーをチェックするオーダークローズ機能は、1シンボルだけで、1口座に1EAで取引しようと思っているので、変更していません。しかし、他の重要な問題やチューニングを処理した後、それを行う予定です。 怠けてないで、直接やってください。 それはあなたが常に含める必要がある重要な ことです。 もし、あなたがプログラムを修正したいのなら、私たちは何が必要かをアドバイスします。 もし、あなたがそれを修正するために働くことを望まないなら、私たちはあなたを助けるために何をしているのですか? 削除済み 2013.12.21 13:12 #28 deVries: 怠けるな、直接やれ !これは、あなたが常に含める必要がある重要なことです。もし、あなたがプログラムを修正したいのなら、私たちは何が必要かをアドバイスします。 もし、あなたがそれを修正するために働きたくないとしたら、私たちはあなたを助けるために何をしているのでしょうか? OK, OK, just take it easy) これで大丈夫だと思います。 オープンオーダー機能 OrderSend(Symbol(),Cmd,Lot,PR,Slippage,SL,TP,"",Expert_ID,0,clr); すべての注文を閉じる //Close all Orders void CloseAllOrders() { for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Expert_ID)) CloseOrder(); } else { Print("Error selecting order: ",GetLastError()); Print(" i= ", i, " Symbol= ", OrderSymbol()); } } return;} 削除済み 2013.12.21 13:18 #29 今、もっと大きな問題があります。私のブローカーは、注文を部分的に実行する傾向があります。 親愛なるお客様へ お客様の取引は価格587.318で部分的に(15.84のうち2.32ロット)開始されたことをここにお知らせします。 この問題について何かご質問がありましたら、ご遠慮なくお問い合わせください。 よろしくお願いします。 ブローカー 以下は、サポートのコメントです。 ボラティリティが高い時や流動性が低い時、指値注文が部分的に執行されることがありますので、ご了承ください。これは、価格が合致した場合、ポジションが即座に全額または一部で満たされることを意味します。お客様の場合、注文は部分的に執行されたので、通知書が届いたのです。 注文が部分的に成立しているにもかかわらず、すべての注文を決済する方法はわかりました。 edit: シンボル注文とマジックナンバー注文をちゃんとチェックしないといけないことに今気づきました。 edit: 部分的に閉じていても注文を閉じるようにするclose all orders関数は こちらです。 //Close all my Orders void CloseAllOrders() { int notMyOrders = 0; for(int j=OrdersTotal()-1;j>=0;j--) { if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)) { if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != Expert_ID)) notMyOrders++; } else { Print("Error selecting order: ",GetLastError()); Print(" j= ", j, " Symbol= ", OrderSymbol()); } } while (OrdersTotal()>notMyOrders) { for(int i=OrdersTotal()-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Expert_ID)) CloseOrder(); } else { Print("Error selecting order: ",GetLastError()); Print(" i= ", i, " Symbol= ", OrderSymbol()); } } } return;} 削除済み 2013.12.21 15:40 #30 ここでは、オープンオーダーの部分実行について、どのように格闘していくかを説明します。 新規注文はNewOrder関数で 実行されなくなり、この関数で実行されることになります。 //OpenOrders in case of partial execution int OpenPartOrders(int Cmd, double Lot) { int NumOrders = 0; int LastTic = -1; double Step = MarketInfo(Symbol(),MODE_LOTSTEP); double LotRemains = Lot; //MathFloor( /Step)*Step;; while (LotRemains>0) { LastTic = NewOrder(Cmd, LotRemains); NumOrders++; if(OrderSelect(LastTic, SELECT_BY_TICKET)==true) { LotRemains = LotRemains - OrderLots(); Print("NumberOfOrders ", NumOrders, " Ticket ", LastTic, " LotRemains ", LotRemains, " initial Lot ", Lot); } else { Print("OrderSelect returned the error of ",GetLastError()); LotRemains = 0;//not to create an endless loop opening new orders again and again } } return(NumOrders);} 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
現在のスプレッドでテストした場合、これは非常にクレイジーな動きをしているので、スプレッドは非常に大きくなる可能性があります。
どのようにテストしたのですか?
固定スプレッドか現在のスプレッドか?
OK、この時こそ「スプレッド」でググってみよう。
私のくだらない質問に答えてくれてありがとうございます))
私はしばらくして戻ってきます。
そうそう、こういう時こそ "拡散 "でググりましょう。
私のくだらない質問に答えてくれて感謝します))
しばらくしたらまた来ます
そして、この値は刻々と変化することができる
なぜかというと、このテストはどのように行われたのか、その方法を尋ねたからです。
そして、この値は刻々と変化することができる
というわけで、このテストはどのように行われたのでしょうか?
その通りです。
私は、違いは、現在のスプレッドのテストのためだった、私は固定スプレッドでテストを実行したとき、彼らはまったく同じだった!
本当にありがとうございました。
本当にありがとうございました。
また、コードに何か改善すべき点があれば教えてください。
ということです。
私は、この違いは現在のスプレッドのテストによるもので、固定スプレッドでテストを行ったところ、全く同じでした
本当にありがとうございました。
本当にありがとうございました。
また、コードに何か改善すべき点があれば教えてください。
あなたのコードが今どうなっているかを示せば
新しいエラーハンドリングも見てみたいので、コメントRaptorUKhttps://www.mql5.com/en/forum/148529 を参照してください。
あなたはあなたのコードが今になっているものを示す場合
新しいエラーハンドリングも見てみたい方は、コメント RaptorUKhttps://www.mql5.com/en/forum/148529 を参照してください。
よし、これで行こう。
価格の正規化。
GetLot関数、私はそれが変更されていないと思います。
新しい注文機能で、正規化された価格を使用するようになりました。
1またはすべての注文を閉じる
私は1つのシンボルだけで、1つのアカウントに1つのEAで取引するつもりなので、シンボルとマジックナンバーをチェックするために注文のクローズ機能を変更していません。しかし、他の重要な問題やチューニングに対処した後に行うつもりです。
EMAのクロス検出をEmaDiff[2]とEmaDiff[1]の比較からEmaDiff[0]とゼロの比較に変更し、追加フラグを使用しました(すべて私が見つけたいくつかの例から来るものです)。
分スケールのデモ口座では、スプレッドが買い取引はEMAが交差させ、その後、同じ分バー内でその後に来る売り取引は、再びそれらを分離させるように高いときに偽のトリガーを作る。
[url=http://postimg.org/image/udq4ufmqf/][img]http://s15.postimg.org/udq4ufmqf/mess.jpg[/img][/url]
今、この対処法を考えているところです
トレーリングストップ機能の
と本体そのものです。
ご関心をお寄せいただきありがとうございます
シンボルやマジックナンバーをチェックするオーダークローズ機能は、1シンボルだけで、1口座に1EAで取引しようと思っているので、変更していません。しかし、他の重要な問題やチューニングを処理した後、それを行う予定です。
怠けてないで、直接やってください。
それはあなたが常に含める必要がある重要な ことです。
もし、あなたがプログラムを修正したいのなら、私たちは何が必要かをアドバイスします。
もし、あなたがそれを修正するために働くことを望まないなら、私たちはあなたを助けるために何をしているのですか?
怠けるな、直接やれ !
これは、あなたが常に含める必要がある重要なことです。
もし、あなたがプログラムを修正したいのなら、私たちは何が必要かをアドバイスします。
もし、あなたがそれを修正するために働きたくないとしたら、私たちはあなたを助けるために何をしているのでしょうか?
OK, OK, just take it easy)
これで大丈夫だと思います。
オープンオーダー機能
すべての注文を閉じる
今、もっと大きな問題があります。私のブローカーは、注文を部分的に実行する傾向があります。
親愛なるお客様へ
お客様の取引は価格587.318で部分的に(15.84のうち2.32ロット)開始されたことをここにお知らせします。
この問題について何かご質問がありましたら、ご遠慮なくお問い合わせください。
よろしくお願いします。
ブローカー
以下は、サポートのコメントです。
ボラティリティが高い時や流動性が低い時、指値注文が部分的に執行されることがありますので、ご了承ください。これは、価格が合致した場合、ポジションが即座に全額または一部で満たされることを意味します。お客様の場合、注文は部分的に執行されたので、通知書が届いたのです。
注文が部分的に成立しているにもかかわらず、すべての注文を決済する方法はわかりました。
edit:
シンボル注文とマジックナンバー注文をちゃんとチェックしないといけないことに今気づきました。
edit: 部分的に閉じていても注文を閉じるようにするclose all orders関数は こちらです。
ここでは、オープンオーダーの部分実行について、どのように格闘していくかを説明します。
新規注文はNewOrder関数で 実行されなくなり、この関数で実行されることになります。