どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 105

 
Forexman77:


こんにちは。

比較的古い話題を持ち出して申し訳ありません。コードで全て理解しました。

今は、どうやってトレードを開始するかというパズルをやっています。例えば、ある範囲の直後で、次のようなものを探しています。

最大値より一定ポイント以上低い場合。取引を開始する。

そのようなコードを追加してテスターで実行してみましたが、ディールを開くことができません。

どうしたらいいのでしょうか?

ターミナルが別のEAの最適化で忙しいので、私自身はテストしていませんが、これでうまくいくはずです。

#define magic 123456789
extern int StartHour=16;
extern int StartMinute=1;
extern int StopHour=17;
extern int StopMinute=59;
bool Flag=true; // Флаг разрешения открытия позиции, чтобы не плодить бесконечное число ордеров
double lots=0.1;// размер лота
double sl=100;  // стоплосс в пунктах
double tp=100;  // тейкпрофит в пунктах
int ticket=-1;
int OldBar;
int init() {
 sl=NormalizeDouble(sl*Point,Digits);//стоплосс в поинтах
 tp=NormalizeDouble(tp*Point,Digits);//тейкпрофит в поинтах
 return(0);}
int deinit() {return(0);}
int start(){
 static double Maximum=-1;
 int StartTime=StartHour*60+StartMinute;
 int StopTime=StopHour*60+StopMinute;
 if(StopTime<=StartTime) {Print("ERROR: Неправильные времена"); return(0);}
 int CurrentMinutesFromDayStart=Hour()*60+Minute();// Текущее время в минутах от начала дня
 datetime td=iTime(Symbol(),PERIOD_D1,0);// Время открытия дневного бара в секундах от 01.01.1970
 if(CurrentMinutesFromDayStart<StartTime) {Maximum=-1;Flag=true;}// Если StartTime еще не настало, то после StopTime нужно пересчитать Maximum и можно открывать ордер
// В 22:55 Принудительно закрываем ордер
 if(CurrentMinutesFromDayStart>22*60+55 && ticket>=0) if(OrderSelect(ticket,SELECT_BY_TICKET)) if(OrderCloseTime()==0) if(OrderClose(ticket,OrderLots(),Ask,30,Magenta)) ticket=-1;
 if(CurrentMinutesFromDayStart>StopTime && Maximum<0) {// если максимум ещё не посчитан
  datetime ts=td+StartTime*60;// начало временного диапазона в секундах от 01.01.1970
  int start= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
  ts=td+StopTime*60;// конец временного диапазона в секундах от 01.01.1970
  int count= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
  count=start-count;// Сколко баров длится временной интервал
  Maximum=iHigh(Symbol(),PERIOD_M1,iHighest(Symbol(),PERIOD_M1,MODE_HIGH,count,start));//Находим максимум на заданном временном интервале
 }
 if(Maximum>0 && Flag) {
  double signal = Maximum - Bid;
  if (signal-12*Point>0.0) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL                                       
   ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,Ask+sl,Ask-tp,"My order",magic,0,Blue);
   if(ticket>=0) Flag=false;// Ордер открылся, сегодня больше не открываем.         
  }
 }
 return(0);
}
 
Sepulca:

ターミナルが別のEAの最適化で忙しいので、私自身はテストしていませんが、これでうまくいくはずです。

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

ターミナルが別のEAの最適化で忙しいので、私自身はテストしていませんが、これでうまくいくはずです。


// В 22:55 Принудительно закрываем ордер
 if(CurrentMinutesFromDayStart>22*60+55 && ticket>=0) if(OrderSelect(ticket,SELECT_BY_TICKET)) if(OrderCloseTime()==0) if(OrderClose(ticket,OrderLots(),Ask,
   30,Magenta)) ticket=-1;
この行を削除してもいいのか、削除しないと動作しないのか?なぜ注文を締め切らなければならないのか理解できない。
 
Forexman77:

この線は削除できるのか、それとも削除しないと動作しないのか?なぜ注文を締め切らなければならないのか、理解できない。

もちろん、削除することも可能です。あくまでもテスト用で、オープンオーダーの数を増やすことはできません。これはあくまでEAの トレーニング例です。売り注文は1日1回までとします。また、EAでは、ストップロス、テイクプロフィット、その他の条件によって注文をクローズする方法を自分で決める必要があります。特に金曜日の午後11時以降は、多くの証券会社でスプレッドが大幅に拡大するため、22時55分という時間が選ばれています。1日に複数の注文を開けるべきと思うかもしれません。そして、これは片側に置かれた注文の例です。類推して最低限を探すべき。このコードは例として、私自身のEAの作成を促進することを望みます)
 

こんにちは。

私はダミーですが、自分でコードの何かを変更したいのですが...。

何かアドバイスがあれば、お暇な時にでも...。

いくつか質問があります。

1.EAに可変の「ストップロス」を追加するには? もちろん、変更できるようにしたいです。

2.EAで各トレードにコメントを追加できるようにするには?

3.マジックナンバーでEAを追加する方法は?

 
K-o-t:

こんにちは。

私はダミーですが、自分でコードの何かを変更したいのですが...。

何かアドバイスがあれば、お暇な時にでも...。

いくつか質問があります。

1.EAに可変の「ストップロス」を追加するには? もちろん、変更できるようにしたいです。

2.EAで各トレードにコメントを追加できるようにするには?

3.マジックナンバーでEAを追加する方法は?

1. external doubleStopLoss=100.0;//ストップロス変数の追加

int ticket=OrderSend(Symbol, TypeOfOrder,LotsOfOrder,OpenPriceOfOrder,Slippage,OpenPriceOfOrder+/-StopLoss,OpenPriceOfOrder-/+TakeProfit,YourMagicNumber,0, CHR_NONE) ;

4.READ!

 
artmedia70:

これがそのジョイントです。

 for (int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1) continue;               // Все удалённые отложки нас не интересуют.. 
  
      if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
          lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
      
      if (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0); // ЗДЕСЬ ВЫХОДИМ ПРИ ПЕРВОМ ВСТРЕЧНОМ
      
      lastOOTHist = OrderOpenTime();   // Тогда время открытия последней закрытой позиции из истории
   }
実は、そうなんです、今朝、改めて見てみたんです。必要以上に利益がある1次が、機能を継続するシグナルを出す(=見逃されない)ことが判明し、その後、当然ながらすべてがおかしくなってしまうのです。
 

こんにちは。

Expert Advisorの最適化 設定で、ネガティブパスの結果も表示されるようにするにはどうしたらいいか教えてください。

 
filpan:

こんにちは。

Expert Advisorの最適化設定で、ネガティブパスの結果も表示されるようにするにはどうしたらいいか教えてください。

最適化結果の タブで、任意の結果を右クリックし、「無駄な結果を表示しない」(またはそのようなもの)のチェックを外してください。
 
見つけました!ありがとうございます。