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

 
solnce600:

皆さん、ごきげんよう。

私は初心者です。テスターでアイデアをコードに落とし込むのは初めての試みです。

アイデアは簡単で、1時間足のローソク足の始値で1つずつ、上下に交互に注文を出すことです。

簡単なコードを書いてみたのですが・・・。しかし、問題は、プログラムが1つのローソク足の始まりで複数の注文を開くことがあることです。

1秒間に1回以上tickが来ると発生するようです。

代替案として、if( ) 条件ヘッダを入れてみたところ...。

受注総額()==0

本当に1オーダーしか開きません。



しかし、このバリエーションは私には合いません。なぜなら、与えられたローソク足が翌日には開かれないからで、このローソク足を開いた瞬間に

は、すでにランダムな数の注文が取引されています。

OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP); start() の実行を return で中断する; ....というのもやってみたのですが。は役に立たなかった。


1秒以内に開く注文を、任意のティックに1つだけ作る方法を教えていただければ幸いです。

int start()

{
double Price=Ask。
double SL=Price-300*Point;
double TP=Price+300*Point;
if( 時()==10 && 分()==00 && 秒()==00)
OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP)を実行。
}

このバリエーションを試してみてください。
int TimeNow, TimePrev, PrevType;

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

  TimeNow=iTime(NULL,0,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);
   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);
   if(Ticket!=-1) { TimePrev=TimeNow; PrevType=-1; } }
 }
 
alsu:


早速のご返信、誠にありがとうございました。
 
Diubakin:
このオプションを試してみてください。
早速のご返信、誠にありがとうございました。
 
プロフェッショナルの皆様へマニュアルモードで動作するSloseBy()関数はどこにあるのでしょうか?フクロウに追加して、マイナス極大のポジションを プラス極大のポジションに手動ではなく、条件に応じて自動的にクローズ できるようにしたいです。codebaseで見つけられませんでした。コードベースにはありませんでした。 ありがとうございました。
 
borilunad:
エヴプロ!マニュアルモードで動作するСloseBy()関数はどこにあるのでしょうか?フクロウに追加したいのですが、最大マイナスのポジションを最大プラスで反対側に閉じるのではなく、条件に応じて自動的に閉じるようにしたいのですが、いかがでしょうか?codebaseで見つけられませんでした。コードベースにはありません。

このオプションを試してみてください。

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); }
 

セルゲイさん、ざっと見た感じでは、価値あるものだと思いますよー。ねじ込んで条件を整え、試してみる。ありがとうございました。

試してみたところ、エラーもなく動作しましたあとは、条件を変えて実験して、効果を出せば大丈夫でしょうでも、それは明日のお楽しみ!

ありがとうございました。そして面白い夢!

 
borilunad:
セルゲイさん、ざっと見た感じでは、価値あるものだと思いますよー。ねじ込んで条件を整え、試してみる。ありがとうございました。
カウンタークローズコマンドの代わりに、本格的なカウンタークローズ機能を挿入してください。そして、関数内の変数を初期化します。
 
artmedia70:
カウンタークローズコマンドの代わりに、本格的なカウンタークローズ機能を挿入してください。そして、関数内の変数を初期化します。
Artyomさん、ありがとうございます!遅かったですね。今日はオンラインのルールに従って全部作るぞー。
 
borilunad:
アルチョムさん、ありがとうございます! 遅かったですね。今日のオンラインのルールに則って、すべてを実行します
がんばってください・・・。
 

こんにちは。そんな疑問があります。

このインジケータは、他のExpert AdvisorやInductorのコードの断片を、私自身のニーズに合わせて苦労して再設計 しました。大きなコードではないので、思い通りに動作します。

問題は、内部で何らかの計算を行い、チャート上に上下の矢印を表示することです。

チャート上に矢印が表示されたときに、正しい方向に注文を出すExpert Advisorの作り方を教えてください。

正確には、どの矢印が現在アクティブかを知るだけで、あとは自分でできると思います。

以下は、分かりやすくするためのコードの一部で、インジケータでの初期化です。

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

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