//--------------------------------------------------------------------// Функция модификации 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)
返回找到的最高值的索引(相对于当前条形图的偏移)。对一个人来说,有什么可以不清楚的呢--我不知道。我也不知道是什么原因导致了他的攻击性和粗野(他们可能只是忽略了这一点),其他人是否会做出反应,或者他是否会自己恢复过来--这对你来说都一样吗?
它们是这样的(你的代码中还有更多的错误,但这些错误甚至不会通过编译器):此外,即使你把代码改成从编译器的角度看更合理的东西
如果在比较之前不先对实际值进行归一化处理,理论上还是会有错误。此外,如果价格在一个点上变化超过一个点,而你的条件被遗漏,正常化可能会失败。
搜索穿越条件的正确方法是
P.S. 在MetaTrader中编译后很容易找到有错误的地方。
1.在 "工具箱 "选项卡的 "文件 "栏中,指定编译器检测到错误的行号和符号号,用逗号分隔。
2.如果你双击同一标签的 "描述 "字段中的错误信息,编辑器的光标将跳到编译器检测到这个错误的地方。
谢谢你的提示。
下午好!对所有论坛成员表示敬意。如果可以,请告知--当你关闭平台时,杂志上的数据必然被清除,对吗?你如何写下打印或任何其他专家顾问的输出数据,以便当你关闭电脑时,它们会被保存在记事本或其他地方? 这不是太复杂了吗,有可能吗?
告诉我如何用订单的开盘价和止损价计算出存款货币的可能损失。
我根据自己的需要,对教科书中的这个交易员的 概念进行了重新加工。在这里,计算给定手数的利润,在拖网水平和利润值高于以前关闭的连续亏损头寸的总损失--拖网被启用--你将拥有一切类似的东西,只是应用的不是利润,如这里,而是损失--如你需要。
注意买入和卖出变量的计算。
以同样的方式做每件事,就是这样。所以我还是不明白如何找出存款货币的点值?
一切都是。