*///-----------------Закрытие по истории в безубыток--------------------//---------------------расчет по истории ордеров номера очередной итерации-----------------------------------------------
Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
Sum_Loss = 0; // суммарный убыток по этим итерациямdatetime
Time_at_History_Current = 0,
Time_at_History_Previos = 0;
if(OrdersHistoryTotal() != 0)
{
for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
{
OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера// для последующего его анализа при подсчете количества итераций
{
double lastLoss = OrderProfit();
Sum_Loss=Sum_Loss+lastLoss; // считаем общий убыток по закрытым подряд убыточным ордерам
Time_at_History_Current = OrderCloseTime();
}
//Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));//Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
{
Time_at_History_Previos = Time_at_History_Current ;
Iteration++;
//Print("Iteration at History в условии сравнения = ", Iteration);
}
else// они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
{
if(OrderProfit() >= 0)
break;
}
}
}
}
}
if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позамif (((AccountEquity() + Sum_Loss + (Sum_Loss * 0.25)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка// Здесь какой-то код, который необходимо выполнить при достижении безубытка
CloseAllBuy();
CloseAllSell();
Sum_Loss = 0.0;
}
}
//-----------------------------------------------------------------
//+----------------------------------------------------------+ //| 指定したチケットで注文を閉じる| //+----------------------------------------------------------+ void CloseMarketOrders(int ticketsArray[][2], double lotsArray[]) { //---- int i,size=ArrayRange(ticketsArray,0); if (size==0) return;
int ticket,type; double lots.Lot.Lot.Lot.Lot; bool res;
int total=OrdersTotal();
for (i=0;i<size;i++) { ticket = ticketsArray[0]; type = ticketsArray[1]; lots = lotsArray[i]; RefreshRates(); // 念のため市場環境更新
// 買付クローズブロック if (type==OP_BUY) { res = OrderClose(ticket,lots,Bid,Slippage,Orange); if (!res) { Print("Failed to close order to buy #",ticket,"!Error #",GetLastError(); // さらなるエラー処理は自分で書く } }
// 売り決済ブロック if (type==OP_SELL) { res = OrderClose(ticket,lots,Ask,Slippage,Orange); if (!res) { Print("Failed to close sell order #",ticket,") { !Error #",GetLastError()); // さらなるエラー処理、自分で書く } }
了解です。ありがとうございました。良いオプションだと思うが、過去のデータでシステムをテストすることができない。だから、なんとか自動的に処方してあげたいと思ったんです。他に何かご意見があればお聞かせください。
履歴でテストするには、ポジションのクローズ条件を決めなければなりません。利益/損失またはポジションの有効期間、例えば3日以内。これは、OrderModifyを 使用して、注文/ポジションのdatetime expirationを変更することで可能です。
そうですね、近い条件であることがわかりました。OrderModifyについて読みましたが、まだ理解できていません。夕方からやってみます。今回もとても迅速なご回答をありがとうございました:)
すみません、言葉にならないのですが、どうしても知っている人がいたら教えてほしいのです。
Windows 7では、一部のファイルが開けないことがあります。Open with...」を押してプログラムを選択しても、プログラム選択リストに表示されない。この制限を解除する方法をご存知の方はいらっしゃいますか?XPにはなかった。クソセブンスに殺されそう :(
レジストリのクリーニングが必要なのでは?具体的には、FB2形式をダブルクリックすることができないのです。CoolReaderを実行し、すべて順調です。開くと、fb2が望んでいないファイル形式をダブルクリックして実行します。
レジストリ検索Utillitoy JV-16(常にそれを使用)を実行 - まあ、それはちょうど恐怖、fb2を言及するので、多くのレジストリエントリを発見 - も殺すために恐れている。どうすればいいのか?グーグル検索しても何も出てこない :(
ごあいさつ
コードの書き直しを手伝ってください。コードは新しいものではないのですが、何かうまくいかないのです。
以下はそのコードです。
マイナストレードが行われた時にループを開き、プラストレードの後、マイナストレードがあった場合、最後に決済した注文の利益分だけマイナス残高を減らし、ゼロより高くなるように頑張ったのですが、どうでしょうか?順序はマイナスで閉じている場合、我々は、利益上の次のトランザクションが損失よりも大きい場合、我々は、次のトランザクションにプラスで閉じている場合、作業を開始しますが、このプラスはマイナスよりも、以前の注文で、負のバランスからこのプラスではなく、次の順序は、すでに我々が前にマイナスで閉じているように、以下の新しい指標と比較することができます。だから、プラス収支なのです。
すみません、言葉にならないのですが、どうしても知っている人がいたら教えてほしいのです。
Windows 7では、一部のファイルが開けないことがあります。Open with...」を押してプログラムを選択しても、プログラム選択リストに表示されない。この制限を解除する方法をご存知の方はいらっしゃいますか?XPにはなかった。クソセブンスに殺されそう :(
レジストリのクリーニングが必要なのでは?具体的には、FB2形式をダブルクリックすることができないのです。CoolReaderを実行し、すべて順調です。開くと、fb2が望んでいないファイル形式をダブルクリックして実行します。
レジストリ検索Utillitoy JV-16(常にそれを使用)を実行 - まあ、それはちょうど恐怖、fb2を言及するので、多くのレジストリエントリを発見 - も殺すために恐れている。どうすればいいのか?グーグル検索しても何も出てこない :(
スタート - すべての番組 - デフォルトの番組 - マッピングの設定
すみません、言葉にならないのですが、どうしても知っている人がいたら教えてほしいのです。
Windows 7では、一部のファイルが開けないことがあります。Open with...」を押してプログラムを選択しても、プログラム選択リストに表示されない。この制限を解除する方法をご存知の方はいらっしゃいますか?XPにはなかった。クソセブンスに殺されそう :(
レジストリのクリーニングが必要なのでは?具体的には、FB2形式をダブルクリックすることができないのです。CoolReaderを実行し、すべて順調です。開くと、fb2が望んでいないファイル形式をダブルクリックして実行します。
レジストリ検索Utillitoy JV-16(常にそれを使用)を実行 - まあ、それはちょうど恐怖、fb2を言及するので、多くのレジストリエントリを発見 - も殺すために恐れている。どうすればいいのか?グーグル検索しても何も出てきませんでした :(
みんな...知ってる人助けて!!!!
問題があって、どうすれば解決できるのか見当もつかないので、説明します。
そこで、私が投稿したコードでは、2つの関数があります
//+--------------------------------------------------------------------------+
//| prepare array of tickets to close |
//+----------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]).
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;
int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
//注文タイプが 成行注文でない場合はスキップ
if (type>OP_SELL) continue;
if (Reverses) // 成行注文タイプを反転
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
} ...................net..............................net
//
// マーケットに残すか、クローズ時に配列に追加するか
if (type==OP_BUY)
{
//
// 買いを残すためのコード
// 例として
if (signal==OP_BUY) continue;
}.
if (type==OP_SELL)
{
//
//code allowing to keep selling
//as example
if (signal==OP_SELL) continue;
}.
closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(ticketsClose,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // ticket #
ticketsClose[closeSize][1]=arrayTickets[i][1]。// 注文の種類
// ここで、何枚閉じるかを指定する
lots[closeSize] = arrayTickets[i][2]; // 閉じる数量
// 部分的に閉じることも可能、その場合は上の行を書き換える必要がある
}
//----
return;
}.
//+----------------------------------------------------------+
//| 指定したチケットで注文を閉じる|
//+----------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;
int ticket,type;
double lots.Lot.Lot.Lot.Lot;
bool res;
int total=OrdersTotal();
for (i=0;i<size;i++)
{
ticket = ticketsArray[0];
type = ticketsArray[1];
lots = lotsArray[i];
RefreshRates(); // 念のため市場環境更新
// 買付クローズブロック
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Failed to close order to buy #",ticket,"!Error #",GetLastError();
// さらなるエラー処理は自分で書く
}
}
// 売り決済ブロック
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Failed to close sell order #",ticket,") { !Error #",GetLastError());
// さらなるエラー処理、自分で書く
}
}
}
//----
return;
}
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) 関数は、注文を閉じるかどうかを決定する条件を渡す必要があります...。
条件をつけてみたが、何も効果がない...。
どなたか、これらの関数にエラーがあるか、あるいは私が失敗したかどうか、見ていただけないでしょうか...。
スタート - すべての番組 - デフォルトの番組 - マッピングの設定
この操作により、番組選択画面が表示されます。番組を指定しても、そこに表示されない。
http://rhpc.ru/topic/200/
エグゼアソシエーションを復元してもダメだった-クールリーダはエグゼアソシエーション。役に立つと思ったから。可哀想に。他に何かあるのでしょうか?そこには他のファイル拡張子へのリンクがあるが、fb2がない。