[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 190

 

SergeyDubakinが CloseBy機能を提供してくれましたが、残念ながら、最大 損失のあるポジションを最大 利益のある反対側のポジションで決済するという、私にとって重要な条件を満たしていません。


アバター
19
ダイバキン 2013.02.25 23:26
borilunad:
Uv.プロ!マニュアルモードで動作するСloseBy()関数はどこにあるのでしょうか?手動ではなく、条件に応じて自動的に最大マイナスでポジションを閉じ、最大プラスで反対側のポジションを閉じることができるようにフクロウに挿入したいのです。codebaseで見つけられませんでした。コードベースにはありません。

このバリエーションを試してみてください。

bool LockOFF(int posit, int oppos, color arrow_color) {
double Result, PrevLoss, PrevProfit;
    int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
   bool Ans;

 MaxProfitTicket=-1; MaxLossTicket=-1;

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(OrderType()>1) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result<0.0 && (PrevLoss==0.0 || Result<PrevLoss)) {
   PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType(); } } // end of for

 if(MaxLossTicket==-1) return(false); // нет убыточной позиции
 if(order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY; 

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(order_type!=OrderType()) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result>0.0 && (PrevProfit==0.0 || Result>PrevProfit)) {
   PrevProfit=Result; MaxProfitTicket=OrderTicket(); } } // end of for

 if(MaxProfitTicket==-1) return(false); // нет противоположной прибыльной позиции

 Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
 if(!Ans) { Print("Ошибка при встречном закрытие"); return(false); }
 
 return(true); }

maxlossを定義する関数GetMaxLoss()とmaxprofitを定義する関数GetMaxProfit()は作りましたが、LockOFF()がそれらのペアではなく、私が指定したペアを選択するようにすることができません。私の最大値を置く場所を教えてください、そして、私はそれらの位置のチケットやインデックスを決定するために多くの関数が必要かもしれません、それは私にとって問題ではありませんが、このLockOFF()のどこにそれをすべて置くのですか?ありがとうございます。

 
borilunad:

SergeyDubakinが CloseBy機能を提供してくれたのですが、残念ながら私にとって重要な条件、つまり最大 損失のあるポジションを最大 利益のある反対側のポジションで決済する、という条件を満たしていません。

こんにちは、この関数は最大損失のポジションを 最大利益の反対側のポジションで決済 するものです。ここでは、テスター用のテストEAをご紹介します。

extern int EA_Magic=135; // внешняя переменная

int TimeNow, TimePrev, PrevType; // глобальные переменные

int start()
 {
  double Price,SL,TP;
     int Ticket;

  TimeNow=iTime(NULL,240,0);
  if(TimePrev==TimeNow) return(0);

  if(PrevType!=1) {
   Price=NormalizeDouble(Ask,Digits);    
   SL=NormalizeDouble(Price-300*Point,Digits);    
   TP=NormalizeDouble(Price+300*Point,Digits);
   Ticket=OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP,"",EA_Magic);
   if(Ticket!=-1) { TimePrev=TimeNow; PrevType=1; } }

  else if(PrevType!=-1) {
   Price=NormalizeDouble(Bid,Digits);    
   SL=NormalizeDouble(Price+300*Point,Digits);    
   TP=NormalizeDouble(Price-300*Point,Digits);
   Ticket=OrderSend(Symbol(),OP_SELL,0.1,Price,3,SL,TP,"",EA_Magic);
   if(Ticket!=-1) { TimePrev=TimeNow; PrevType=-1; } }

  if(Hour()==0 && TimePrev==TimeNow) LockOFF(EA_Magic);

  return(0);
 }

bool LockOFF(int EA_Magic) {
 double Result, PrevLoss, PrevProfit;
    int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
   bool Ans;

 MaxProfitTicket=-1; MaxLossTicket=-1;

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(OrderType()>1) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result<0.0 && (PrevLoss==0.0 || Result<PrevLoss)) {
   PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType(); } } // end of for

 if(MaxLossTicket==-1) return(false); // нет убыточной позиции
 if(order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY; 

 orders_total=OrdersTotal();
 for(pos=orders_total-1; pos>=0; pos--) {
  if(!OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)) continue;
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=EA_Magic) continue; // не наш ордер
  if(order_type!=OrderType()) continue;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
  if(Result>0.0 && (PrevProfit==0.0 || Result>PrevProfit)) {
   PrevProfit=Result; MaxProfitTicket=OrderTicket(); } } // end of for

 if(MaxProfitTicket==-1) return(false); // нет противоположной прибыльной позиции

 Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
 if(!Ans) { Print("Ошибка при встречном закрытие!"); return(false); }
 
 return(true); }

新しい4時間足が表示されたら買いポジションと売りポジションを交互に開き、新しい日が始まったら反対方向の決済を1回行います。

 
Diubakin:

こんにちは、この関数は最大損失のポジションを最大利益のポジションで反対側に閉じます。ここでは、テスター用のテストEAをご紹介します。

新しい4時間足が表示されたら買いポジションと売りポジションを交互に開き、新しい日が始まったら反対方向の決済を1回行います。

セルゲイさん、こんにちは!私は別のアルゴリズムを持っています。問題は、この関数が持っているものを閉じてしまうということです。まあ、別に、誰も助けてくれなかったら、自分で終わらせるよ!」。あなたのバージョンはテスターだけで良いので、ルールに従ってヘッダーに追加されました。エラーもなく正常に動作しているが、最大値が選択されない以上、よろしくお願いします。
 
alsu:

それだ!今、手に入れたんだ。現在のバーの価格がOpen[0] + 30に達したら、オープンします。バーが終了した場合、Open[0]が変更され、それに応じてオープンレベルがシフトします。マーケットには1つの取引しかないはずですよね。

すると、こんな感じです。

新しいバーが形成されると、システムは自動的にOpen[0]に新しい値を追加し、これは新しいレベルが正しく計算されることを意味するので、新しいバーを追跡する必要はありません。買い取引は現在のAsk価格で開始され、Bid価格でクローズ(TPとSL)されることに注意してください。また、価格値も正規化する必要があります。


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

しかし、テスターでは1分足の ローソク足 ごとに トレードを開始します。情報はこのリンクにあります http://clip2net.com/s/2T98Y

5分足の ローソク足で1つの注文を出すようにしたいのですが、すべての ローソク足で 出すのは無理です。

また、現在の 5分足のローソク足が、>または=30pips (始値から最大値まで)の場合のみ。

つまり、ゼロ=現在の5分足ロウソクの始値から30番目のポイントで成行注文を1本建てる。

そして、現在の建値から最大値までの5分足が30ポイント未満であれば、成行注文を出すべきではありません。

すなわち、注文は少ないだろう、私は1999年以来、Excelでカウントしている -ユーロ-ドル 両方向で3000より少し。

次の5分足に切り替え、それ、つまり現在の5分足>または= 30pipsであれば、30pipsでオープンし、それ以下であれば、次の5分足に切り替える・・・というように、チャートの終わりまで行います。

しかし、大雑把に見積もっても、30 pipのストップで決済 されるよりも、>>30pipの ペンタミノが 15pip以上飛んで いることがほとんどであることです。

条件があります - 未決済の注文がない場合

しかし、私のシステムでは、上記のようなパラメータを持つ 5分足を2つ連続して形成 し、 前の5分足の注文が決済されなければ、2つ目の5分足では注文は出ません。

取引中の注文の有無にかかわらず、上記のパラメータで 5分足ごとに1つずつ注文を出す必要があるのですが、どうすればいいですか?

 
if (OrdesTotal()==0 && Close[0]>=Price)  
 
alsu:

それだ!今、手に入れたんだ。現在のバーの価格がOpen[0] + 30に達したら、オープンします。バーが終了した場合、Open[0]が変更され、それに応じてオープンレベルがシフトします。マーケットには1つの取引しかないはずですよね。

すると、こんな感じです。

新しいバーが形成されると、システムは自動的にOpen[0]に新しい値を追加し、これは新しいレベルが正しく計算されることを意味するので、新しいバーを追跡する必要はありません。買い取引は現在のAsk価格で開始され、Bid価格でクローズ(TPとSL)されることに注意してください。また、価格値も正規化する必要があります。


また、2つ目の条件として、現在の5分足の終値≧注文の始値である場合というのがありますね。

しかし、私のアイデアでは、現在の5分足の終値は、その高さが30ピップス以上であれば、どのような価格でも構いません。


Close[0]>=Price

 
borilunad:
セルゲイさん、こんにちは!私は別のアルゴリズムを持っています。それが問題で、この関数は持っているものを閉じるのであって、最大限のものを閉じるようにしたいのです。まあ、別に、誰も助けてくれなかったら、自分で終わらせるよ!」。あなたのバージョンはテスターだけで良いので、ルールに従ってヘッダーに追加されました。エラーもなく正常に動作しているが、最大値が選択されない以上、よろしくお願いします。

どのようにしたいですか?私が投稿したものは、預金通貨(マネー)で最も収益性の低いポジションを決定し、同じく預金通貨で最も収益性の高い反対側のポジションを決定し、カウンタークローズを行うものです。

borilunad:

maxlossを決める関数GetMaxLoss()とmaxprofitを決める関数GetMaxProfit()を実装しましたが、LockOFF()関数に、どれでもない、私が指定したペアを選択させることができません。私の最大値を置く場所を教えてください、そして、私はそれらの位置のチケットやインデックスを決定するために多くの関数が必要かもしれません、それは私にとって問題ではありませんが、このLockOFF()のどこにそれをすべて置くのですか?ありがとうございます。

この関数には、最大損失、最大利益、チケットの定義など、すべてが含まれています。

 
Diubakin:

どのようにしたいですか?投稿されたものは、入金通貨(マネー)で最も不利なポジションを決定し、同じく入金通貨で最も有利な反対ポジションを決定し、カウンタークローズを行うものです。

最大損失、最大利益、チケットも定義されています。

あなたは間違っている!私はより多くを持っているかもしれませんが、おそらくあなたは、反対側の位置の唯一のペアを持っています。 私はコメントにすべてのデータを入れて、それはmaxiLoss maxiProfitが、私は遭遇する最初のもののいずれかを閉じていないことを確認する理由です。また、私の機能では、最大損失と最大利益のポジション指数が明確に表示されます。あとは、LockOFF()にこれらのチェックを追加するだけです!
 
borilunad:
あなたは間違っている!私はコメントですべてのデータを表示し、それがmaxiLossマキシプロフィットではなく、検索で出てくる最初のもののいずれかを閉じることを参照しているため、私はより多くを持っているかもしれませんが、あなたはおそらく、反対側の位置の唯一のペアを持っています。また、私の機能では、最大損失と最大利益のポジション指数が明確に表示されます。これらのチェックをLockOFF()に追加するだけでいいんです!
テスターでこの機能のテストEAをご覧になりましたか?注文が2つでも20つでも、最大損失と最大利益を正確にクローズします。
 
Vinin:

https://www.mql5.com/ru/code/7835 あくまで指標です。EAではオブジェクトを使用する必要があります。
Expert Advisorに興味があるのですが、オブジェクト - 自分でローソクを描くべきですか?
 
Diubakin:
テスターでその関数のテストEAをご覧になりましたか?注文の数が2つでも20つでも、最大損失と最大利益を正確にクローズします。
もちろん、そうです!確かに、私は3つ以上持っていません。リザルトのテスターやジャーナル、デモやチャートもくまなく見てみましたその時は、お見せしますよ!