//--------------------------------------------------------------------// Функция модификации StopLoss всех ордеров указанного типа// Глобальные переменные:// Mas_Ord_New Массив ордеров последний известный// int TralingStop Значение TralingStop(количество пунктов)//--------------------------------------------------------------------void SampleTrailing_texbook ( int Tip, double V_StopLossPips, double V_TakeProfitPips)
{
int Ticket; // Номер ордераdouble
Price, // Цена открытия рыночного ордера
TS, // TralingStop (относит.знач.цены)
SL, // Значение StopLoss ордера
TP; // Значение TakeProfit ордераdouble difference; //разность в пунктах double Profit;
bool Modify; // Признак необходимости модифи.//----------------------------------------------------------------------
PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE));
Print("PointValue = ",PointValue, " Point = ", DoubleToStr(Point, Digits) );
Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL ); // мин уровень трала
Modify=false; // Пока не назначен к модифи
Price = OrderOpenPrice(); // Цена открытия ордера
SL = V_StopLossPips; // Значение StopLoss ордера
TP = V_TakeProfitPips; // Значение TakeProft ордера
Ticket= OrderTicket(); // Номер ордераif (TralingStop<Level_new) // Если меньше допустимого..
TralingStop=Level_new; // .. то допустимый
TS=TralingStop*Point; // То же в относит.знач.цены//-----------------------------------------------------------------switch(Tip) // Переход на тип ордера
{
case0 : // Ордер Buy
difference = NormalizeDouble (Bid-TS - OrderOpenPrice(), Digits)/Point;
Profit = Lots_New * difference*PointValue; // Профит по УРОВНЮ ТРАЛА рыночного ордера на данном объеме (не путать c OrderProfit)if (trlinloss==false){ // тралим только профитif (Profit>MathAbs (Sum_Loss)) // если профит по уровню трала больше суммарного убытка предыдущих поз if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
NormalizeDouble(Bid-TS,Digits) && NormalizeDouble(Price,Digits)< NormalizeDouble(Bid-TS,Digits))
{ // ..то модифицируем его:
SL=Bid-TS; // Новый его StopLoss
Modify=true; // Назначен к модифи.
}
}
else { // тралим с зоны лоссовif (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
NormalizeDouble(Bid-TS,Digits))
{ // ..то модифицируем его:
SL=Bid-TS; // Новый его StopLoss
Modify=true; // Назначен к модифи.
}
}
break; // Выход из switchcase1 : // Ордер Sell
difference = NormalizeDouble (OrderOpenPrice()-(Ask+TS),Digits)/Point;
Profit = Lots_New * difference*PointValue; // Профит по УРОВНЮ ТРАЛА рыночного ордера на данном объеме (не путать c OrderProfit) if (trlinloss==false) { // тралим с уровня профита по ордеруif (Profit>MathAbs (Sum_Loss)) // если профит по уровню трала больше суммарного убытка предыдущих поз if ((NormalizeDouble(SL,Digits)> // Если выше желаемого..
NormalizeDouble(Ask+TS,Digits)||
NormalizeDouble(SL,Digits)==0) && NormalizeDouble(Price,Digits)>NormalizeDouble(Ask+TS,Digits)) //.. или нулевой(!)
{ // ..то модифицируем его
SL=Ask+TS; // Новый его StopLoss
Modify=true; // Назначен к модифи.
}
}
else { // тралим с зоны лоссовif (NormalizeDouble(SL,Digits)>// Если выше желаемого..
NormalizeDouble(Ask+TS,Digits)||
NormalizeDouble(SL,Digits)==0)//.. или нулевой(!)
{ // ..то модифицируем его
SL=Ask+TS; // Новый его StopLoss
Modify=true; // Назначен к модифи.
}
}
} // Конец switchif (Modify==false) // Если его не надо модифи..return; // ..то идём по циклу дальшеbool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифицируем его!//----------------------------------------------------------------------if (Ans==false) // Не получилось :(
{ // Поинтересуемся ошибками:
Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
return; // .. то уходим.
}
} // Выход из пользов. функции
intiHighest( string symbol,int timeframe,int type,int count=WHOLE_ARRAY,int start=0, int start=0)
見つかった最高値のインデックスを返します(現在のバーからの相対的なオフセット)。何が人にとって不明確なのか--。何が原因で攻撃的で野暮ったくなったのか(無視すればよかったのに)、他の人は反応したのか、それとも自分で立ち直ったのか、私にはどちらもわかりません。あなたにとっては、すべて同じことなのでしょうか?
さらに、コンパイラから見てまともなコードに変更したとしても
というのは、比較する前に実測値を正規化しないと、やはり理論的に間違ってしまうからです。また、1ティックに1ピップ以上価格が変動した場合、正規化に失敗することがあり、条件を見逃すことがあります。
交差条件の正しい検索方法は
追伸:MetaTraderでコンパイルした後、エラーのある場所を見つけるのは非常に簡単です。
1.ツールボックス」タブの「ファイル」欄に、コンパイラがエラーを検出した行番号とシンボルの番号をカンマで区切って指定します。
2.同じタブの「説明」欄にあるエラーメッセージをダブルクリックすると、コンパイラがまさにこのエラーを検出した場所にエディタのカーソルがジャンプします。
ヒントをありがとうございました。
こんにちは!フォーラムメンバーの皆さん、こんにちは。もし可能なら、アドバイスをお願いします。プラットフォームをオフにすると、雑誌のデータは必然的に消去されますよね?また、Expert Advisorからのプリントやその他の出力データを、コンピュータの電源を切ったときに、メモ帳などに保存しておくには、どのように書けばよいのでしょうか? あまりに複雑で、可能性がないのでは?
注文の開始価格とストップロスの価格で、預け入れ通貨で可能な損失を計算する方法を教えてください。
このトレーダーズフィオンは、教科書に載っているものを、私が自分のニーズに合わせて作り直したものです。ここでは、ロットの与えられたボリューム上の利益の計算、トロールのレベルと以前の閉鎖された連続した負けポジションの合計損失以上の利益の値で - トロールが有効になっている - あなたが必要とするように、ここだけのように、利益ではなく、損失を適用するには、同様のすべてを持っているでしょう - 。
BuyとSellの変数の計算に注意すること。
すべて同じようにやって、それでおしまい。では、預金通貨でのポイント値を調べる方法がまだわからないのですが?
この 計算を参照してください - ANALOGUEを行う。すべてです。