bool TrailingStop()
{
int MD0=MarketInfo(Symbol(),MODE_STOPLEVEL);
if ((OrderMagicNumber()==11111)==true)
{
Print("Ведём позицию Buy");
while(OrderCloseTime()==0)
{
if ((NormalizeDouble(Bid-OrderStopLoss()+StepStop*Point,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
{
RefreshRates();
Print("текущий бид-",Bid,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(Bid-OrderStopLoss(),Digits),", новый стоп-",NormalizeDouble(Bid-StopLevel*Point,Digits));
if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
elsePrint("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
}
Sleep(1000);
}
if (OrderCloseTime()>0)
{
Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
return(true);
}
}
else
{
if ((OrderMagicNumber()==22222)==true)
{
Print("Ведём позицию Sell");
while(OrderCloseTime()==0)
{
if ((NormalizeDouble(OrderStopLoss()+StepStop*Point-Ask,Digits)>NormalizeDouble(StopLevel*Point,Digits))&&(NormalizeDouble(MD0,Digits)<NormalizeDouble(StopLevel*Point,Digits)))
{
RefreshRates();
Print("текущий бид-",Ask,", текущий стоп-",OrderStopLoss(),", текуйщий тейк-",OrderTakeProfit(),", цена открытия-",OrderOpenPrice(),", расстояние от текущего стопа до текущего бида-",NormalizeDouble(OrderStopLoss()-Ask,Digits),", новый стоп-",NormalizeDouble(Ask+StopLevel*Point,Digits));
if (OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+StopLevel*Point,Digits),OrderTakeProfit(),0)==true)
Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
elsePrint("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
}
Sleep(1000);
}
if (OrderCloseTime()>0)
{
Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
return(true);
}
}
elsereturn(false);
}
}
うまくいったかな?NumberOfPositions(Symbol(),OP_BUY,Magic); は、買いポジションの保有数?
Expert Advisorはオープニング条件を定義せず、指定した方向(変数BUYとSELL)にオープンするだけです。このEAでもあなたのEAでも、最後の取引が利益または損失で終了したかどうかを確認する条件を追加することができます。しかし、私の考えでは、それはすでにその課題に対処しています。この戦略の採算性の低さを最も明確に示しています。実は、これにはExpert Advisorも必要なく、電卓がなくても履歴で30分もあれば計算できるんです。ストップロスとテイクプロフィットが同じ場合は、スプレッドに取引 回数をかけたものが損失となり、それ以外の場合は、スプレッドにストップロスとテイクプロフィットの差額の2分の1を加えたものが損失となります。
追伸:一般的に、owlのコードは異なりますが、あなたが望む条件を追加すれば、あなたのEAが行うことと全く同じことを行います。つまり、価格が変化して反対方向に行った場合、各クローズで2つの反対売買を開くことになるのです。私にとっては、目の前のタスクに関係のない「不要なもの」をコードからすべて取り除く方が簡単だったのです。
P.P.S.NumberOfPositions(Symbol(),OP_BUY,Magic) の件、了解しました。
どの郵便局で受信した郵便物やその内容をテキスト化できるのか?
例:mail.ru
Expert Advisorは開くための条件を持たず、設定した方向(変数BUYとSELL)に開くだけです。このEAでもあなたのEAでも、最後の取引が利益または損失で終了したかどうかを確認する条件を追加することができます。しかし、私の考えでは、それはすでにその課題に対処しています。この戦略の採算性の低さを最も明確に示しています。実は、これにはExpert Advisorも必要なく、電卓がなくても履歴で30分もあれば計算できるんです。Expert Advisorに条件(反対売買を2回行い、Stop LossまたはTake Profitのみで決済)を追加すると、すぐに損失額が固定され、取引回数にのみ依存するようになります。
EAのテスト時になぜか500~800のポジションを一気に開いてしまうのですが、なぜかオープンポジションの 数が依存していて調整できない(!?)のです。
オープンポジションの数を減らすには、ロットを増やすしかありません。 ロットを最大に設定すると、1~3ポジションを一度にオープンすることになります。
ロットを最小に設定すれば、一度に500~1500のポジションを開くことができます
オープンポジションの数がなぜそれに依存するのかわからない。 調整ができない(!?
オープンポジションの数を減らすには、ロットを増やすしかありません。 ロットを最大に設定すると、1~3ポジションを一度にオープンすることになります。
ロットを最小に設定すれば、一度に500~1500のポジションを開くことができます
1.一度に開くことができる注文の数は限られています。
2.ロットが大幅に増加した場合、資金不足により追加ポジションを開設 することができません。
テスト中にいただいたExpert Advisorで、なぜか一度に500~800のポジションを開いてしまうのですが、何がオープンポジションの数を決めるのかがわからず、調整もできません(
オープンポジションの数を減らすには、Lotを増やすしかありません。Lotをいっぱいに設定すると、一度に1~3ポジションをオープンすることになります。
ロットを最小に設定すると、一度に500-1500のポジションを開くことができます。
EAにtrailingのようなものを書いたのですが、うまくいきません。何を変更して動作させようとするかによって、修正時にエラー1が発生したり、最初のプリント(Print("Leading Buy position"); )より先に進まないのです。何が原因でしょうか。何か提案があれば喜んで伺います。どうぞよろしくお願いします!
EAにtrailingのようなものを書いたのですが、うまくいきません。何を変更して動作させようとするかによって、修正時にエラー1が発生したり、最初のプリント(Print("Leading Buy position"); )から先に進まないのです。何が原因でしょうか。何か提案があれば教えていただければと思います。よろしくお願いします(^^)
あなたの条件while(OrderCloseTime()==0).このループに入ると、注文が終了するか、ループにないオペレータのブレークまたはリターンに遭遇するまで、修正の試行が繰り返されます。
すみません、しくじりました。あるにはあるのですが、眼鏡がないとすぐには気がつきませんでした。余分な括弧を削除し、出力を追加しました。 うまくいくかもしれませんのでお試しください。
EAにtrailingのようなものを書いたのですが、うまくいきません。何を変更して動作させようとするかによって、修正時にエラー1が発生したり、最初のプリント(Print("Leading Buy position"); )から先に進まないのです。何が原因でしょうか。何か提案があれば教えていただければと思います。よろしくお願いします(^^)