#define magic 123456789externint StartHour=16;
externint StartMinute=1;
externint StopHour=17;
externint 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(){
staticdouble 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.1970if(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.1970int start= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
ts=td+StopTime*60;// конец временного диапазона в секундах от 01.01.1970int 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);
}
int ticket=OrderSend(Symbol, TypeOfOrder,LotsOfOrder,OpenPriceOfOrder,Slippage,OpenPriceOfOrder+/-StopLoss,OpenPriceOfOrder-/+TakeProfit,YourMagicNumber,0, CHR_NONE) ;
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(); // Тогда время открытия последней закрытой позиции из истории
}
こんにちは。
比較的古い話題を持ち出して申し訳ありません。コードで全て理解しました。
今は、どうやってトレードを開始するかというパズルをやっています。例えば、ある範囲の直後で、次のようなものを探しています。
最大値より一定ポイント以上低い場合。取引を開始する。
そのようなコードを追加してテスターで実行してみましたが、ディールを開くことができません。
どうしたらいいのでしょうか?
ターミナルが別のEAの最適化で忙しいので、私自身はテストしていませんが、これでうまくいくはずです。
ターミナルが別のEAの最適化で忙しいので、私自身はテストしていませんが、これでうまくいくはずです。
ターミナルが別のEAの最適化で忙しいので、私自身はテストしていませんが、これでうまくいくはずです。
この行を削除してもいいのか、削除しないと動作しないのか?なぜ注文を締め切らなければならないのか理解できない。
この線は削除できるのか、それとも削除しないと動作しないのか?なぜ注文を締め切らなければならないのか、理解できない。
もちろん、削除することも可能です。あくまでもテスト用で、オープンオーダーの数を増やすことはできません。これはあくまでEAの トレーニング例です。売り注文は1日1回までとします。また、EAでは、ストップロス、テイクプロフィット、その他の条件によって注文をクローズする方法を自分で決める必要があります。特に金曜日の午後11時以降は、多くの証券会社でスプレッドが大幅に拡大するため、22時55分という時間が選ばれています。1日に複数の注文を開けるべきと思うかもしれません。そして、これは片側に置かれた注文の例です。類推して最低限を探すべき。このコードは例として、私自身のEAの作成を促進することを望みます)
こんにちは。
私はダミーですが、自分でコードの何かを変更したいのですが...。
何かアドバイスがあれば、お暇な時にでも...。
いくつか質問があります。
1.EAに可変の「ストップロス」を追加するには? もちろん、変更できるようにしたいです。
2.EAで各トレードにコメントを追加できるようにするには?
3.マジックナンバーでEAを追加する方法は?
こんにちは。
私はダミーですが、自分でコードの何かを変更したいのですが...。
何かアドバイスがあれば、お暇な時にでも...。
いくつか質問があります。
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!
これがそのジョイントです。
こんにちは。
Expert Advisorの最適化 設定で、ネガティブパスの結果も表示されるようにするにはどうしたらいいか教えてください。
こんにちは。
Expert Advisorの最適化設定で、ネガティブパスの結果も表示されるようにするにはどうしたらいいか教えてください。