//---------------------------------------------------------------int Handle, // File descriptor
Qnt_Symb; // Number of recorded symbolsstring File_Name="check.csv"; // File name
Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE|FILE_READ,";");//File opening File opened here, outside the loopFileWrite(Handle,"Ticket","Magic","OTime","Type","Lots","Symbol","OPrice","S/L","T/P");
for(int iPos = OrdersTotal()-1; iPos >= 1 ; iPos--)
{
OrderSelect(iPos,SELECT_BY_POS);
FileWrite(
Handle,
OrderTicket(), //intOrderMagicNumber(), //intTimeToStr(OrderOpenTime()), //datetime // this is a string - Time to StringOrderLots(), //doubleOrderSymbol(), //stringOrderOpenPrice(), //doubleOrderStopLoss(), //doubleOrderTakeProfit(), //doubleTimeToStr(OrderCloseTime() ) //int // this is a string - Time to String
) ; //end file writeFileClose(Handle); // why close the file inside the loop when it was opened outside the loop ?
}
} // what is this code inside of ?
} // end of start//---------------------------------------------------------------
基本的に、私は特定の時間、具体的には23:00 GMT+2だと思いますが、2つの保留中の注文を設定しました。保留中の注文の1つは売りストップ、もう1つは買いストップで、両方の注文は23:00のローソク足のオープンから同じ距離、この場合は14ピップ離れています。両方の注文のTakeProfitは28ピップス(この場合)、StopLossは55ピップスです。
両方の注文が成立したとき(注文が失効する前に23:00のローソク足の始値から14pips上下する)、両方の注文のテイクプロフィットを たとえば20pips増加させたいと思います。つまり、この場合の新しいテイクプロフィットは58pipsです。しかし、ストップロスはずっと同じままでなければなりません。基本的に私がやろうとしていることは、ある種のヘッジです。
2つの取引を開いている場合、価格が一方向に大きく動く可能性があり、両方の取引のテイクプロフィットを増やせば、損失を相殺するのに十分です。利益を得るためには、1つのトレードを開いてテイクプロフィットに到達するか、両方のトレードを開いてテイクプロフィットを打ち、一方向に大きく動くことがないようにしなければなりません。
これが明確であればいいのですが、そうでなければ、より明確になるように画像を提供します。
私は、あなたの直前の投稿を 参照していました
EA全体の改訂コードはこちらです。
これが明確であることを望みますが、もしそうでなければ、より明確であるべき画像を提供します。
わかりました、ありがとうございます。
それで、あなたはこれらの注文を一度修正したいだけなのですね。23:00のバーをチェックして、注文が開始されるはずだったTPを決定する必要があります。
それは明らかです、ありがとうございます。
では、これらの注文を一度修正したいだけなのですね・・・それなら答えは簡単です。23:00のバーをチェックして、注文が開始されるべきだったTPを決定する必要があります。
つまり、本質的には、2つの取引(同じシンボルとマジックナンバー)がある場合、EAは、以前に存在した保留中の注文(現在実行されている)と比較して、オープン取引の利益確定を チェックし、それらが同じであれば、それを変更する必要があり、一度ループすると、再びチェックして、それらが同じではないことがわかり、したがって、さらに取引を変更しないのでしょうか?
1. 修正とチェックは、2つの取引が開いているときだけ行われるべきですが、これを行うにはどうしたらよいでしょうか?すでに持っているコードに追加するか、もう一度始めるべきでしょうか?
2. つまり、本質的には、2つの取引(同じシンボルとマジックナンバー)がある場合、EAはオープン取引のテイクプロフィットを、以前に存在した保留中の注文(現在実行中)と比較してチェックし、それらが同じであれば変更し、一度ループすると、再度チェックして、それらが同じではないことがわかり、それ以上取引を変更しないのでしょうか?
1. 未決済注文をループし、シンボルとマジックナンバーをチェックし、一致する注文が あればカウンターを増加させます ... ... 注文のチェックが終わり、2つカウントされていれば、正しいシンボルとマジックナンバーの未決済注文が2つあります ... ... それで、それらを修正できます ... 2を見て。
2. いいえ、保留中の注文が有効化され、保留中でなくなった場合、その注文のTPを見ることはできません。 EAは23:00のバーをチェックして、元のTPが何で あったかを調べます ... それから、これを2つの未決済注文のTPと比較します ... この情報から、変更するかしないかを決定します。
1. 未決済注文をループし、シンボルとマジックナンバーをチェックし、一致する注文があればカウンターを増加させる ... ...注文のチェックが終わり、2つカウントされていれば、正しいシンボルとマジックナンバーの未決済注文が2つある ... ... だから、それらを修正できる ... 2を見て。
2. いいえ、保留中の注文が有効化され、保留中でなくなった場合、その注文のTPを見ることはできません。 EAは23:00のバーをチェックして、元のTPが何で あったかを調べます ... それから、これを2つの未決済注文のTPと比較します ... この情報から、修正するかしないかを決定できます。
なるほど、私がずっとやろうとしていたことだと思います。今のところ、1つの注文が修正されていますが(具体的には、私のテストでは注文2である買いの注文)、それは修正され続けています、私はそれを繰り返すのを止めるために 'break'を使用しますか?また、どのようにカウントして、2つの注文が開いているときだけ、開いている注文を修正すればいいのでしょうか?このためにOrdersTotal()を使おうとしていますが、うまくいきません。それぞれの注文のために2つの別々のコードを作る必要はないと思うのですが?
偶数のオープンオーダーだけが修正され、私が言ったように、それらは繰り返し修正されます。OrderSelect()の様々な組み合わせを試しましたが、まだ理解できません。私はこれを読みましたhttps://book.mql4.com/trading/ordermodify これは私の状況と何か関係があるのでしょうか?これはストップロスのためのものですが、私は基本的にテイクプロフィットのためにそれが必要です。
私はここで何を間違えているのでしょうか?
TPが23:00のローソク足と同じかどうかは、どのように確認すればいいのでしょうか?2つの注文があるときにオープンオーダーが修正される限り、それは同じ効果を達成するので、そのように必要なのでしょうか?それとも、注文が継続的に変更されるのを阻止するためだけでしょうか。
ありがとうございます。
madmax3
return(0)は、2番目のオーダーが修正される前にstart()を終了しています。
あなたがしていることは、ポジションによってオーダーを選択し、それが正しいマジックナンバーを持っていることを確認し、それが正しいシンボルであることを確認し、それがOP_BUYであることを確認しています ... それから、それを修正します、あなたはそれがすでに修正されているかどうかを判断していますか?
EAは中断されても回復できなければなりません。注文が発注され、MT4がクラッシュしても、再起動すれば中断されたところから回復できなければなりません。
このため、注文がすでに変更されているか、または変更が必要かを判断する必要があります ... どのように?
"特定の時間、具体的には 23:00 GMT+2 と思われる時間に、2 つの 保留 中の注文を 設定しました。両方の注文は23:00のローソク足からオープンまで同じ距離、この場合は14ピップス離れています。両方ともTakeProfitが28ピップ(この場合)、StopLossが55ピップ です。
23:00のローソク足を参照することで、元のTPがどこにあったかを計算することができます。
注文が変更されたことを記録する方法は他にもあり、チケット番号を記録しておき、変更されたときにその情報をファイルに書き込み、再度変更しようとするときにそのファイルを開いてチケット番号をチェックする、などなど。 オリジナルのTPとの照合はもっと簡単だと思います。
今のところ、こんな感じです。
上記のようなファイル書き込みコードが含まれています。
しかし、私はこれらのエラーが発生します。
2012.04.04 15:30:06 2012.01.16 06:25 TimeBasedEA Version 2: FileOpen - too manyopened files.
2012.04.04 15:30:06 2012.01.16 06:25 TimeBasedEA Version 2: FileWrite で invalid handle -1 が発生しました。
どうしたんだろう?
なぜ、最も難しい方法を選んだのですか?
ファイルへの書き込みが終わったら、ファイルを閉じる必要があります ... すでに開いているなら、もう一度開く必要はありません。
あなたのforループは間違っています ... ... 最後のオーダーの位置は1ではなく 0 です。
いったいなぜ、最も難しい選択肢を選んだのでしょうか?