voidOnTick()
{
TimeCurrent(dt);
//--- Достаточно ли количество баров для работыif(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
{
Alert("На графике меньше 10 баров, советник не будет работать!!");
return;
}
//--- сначала нужно записать в массивы значения буферов индиктора Fractal//--- заполнение данными буфераArraySetAsSeries(Signal,true);
ArraySetAsSeries(Main,true);
if(CopyBuffer(Stochastic_handle,0,0,100,Main)<=0) return;
if(CopyBuffer(Stochastic_handle,1,0,100,Signal)<=0) return;
double Main_1=Main[1];
Main_1=NormalizeDouble(Main_1,5);
Print("Main_1=",DoubleToString(Main_1,5));
double Main_2=Main[2];
Main_2=NormalizeDouble(Main_2,5);
double Main_3=Main[3];
Main_3=NormalizeDouble(Main_3,5);
double Signal_1=Signal[1];
Signal_1=NormalizeDouble(Signal_1,5);
Print("Signal_1=",DoubleToString(Signal_1,5));
double Signal_2=Signal[2];
Signal_2=NormalizeDouble(Signal_2,5);
double Signal_3=Signal[3];
Signal_3=NormalizeDouble(Signal_3,5);
// Для сохранения значения времени бара мы используем static-переменную Old_Time.// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.// Если они не равны, это означает, что начал строится новый бар.staticdatetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
// копируем время текущего бара в элемент New_Time[0]int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, успешно скопировано
{
if(Old_Time!=New_Time[0]) // если старое время не равно
{
IsNewBar=true; // новый барif(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
Old_Time=New_Time[0]; // сохраняем время бара
}
}
else
{
Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
ResetLastError();
return;
}
// открытие покупок
if(Main_1>Signal_1&&Main_2<Signal_2&&Main_3<Signal_3&&Main_2<20)
{
if(IsNewBar!=false)
{
{
open_by_market();
}
}
}
// закрытие покупок if (Signal_3>80&&Signal_2>80&&Signal_1<80)
{
if(PositionsTotal()>0)
{
for(int i=0;i<PositionsTotal();i++)
{
ulong orders_ticket=PositionGetTicket(i);
if(((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) ))
{ trade.PositionClose(orders_ticket); }
}
}
}
}
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
日安,请说明如何实现两个任务(以买入信号为例)。
给出:进场点--随机线穿越20点以下
交易结束 - 向下穿过慢速随机线的80水平
即不要像附图中那样在同一水平上建立多个头寸。
2.在第二次,而不是在第一次穿越80级从上到下的缓慢随机线时收盘
日安,请说明如何实现两个任务(以买入信号为例)。
给出:进场点--随机线穿越20点以下
交易结束 - 向下穿过慢速随机线的80水平
即不要像附图中那样在同一水平上建立多个头寸。
2)第二笔订单将在第二次,而不是第一次,通过慢速随机线向下跨越80级时关闭。
首先明确提出。
请告知如何在构建的专家顾问的OnTick功能 中获取头寸信息。至少,如果它是开放的或不开放的。我在哪里可以得到位置的指针?还是需要以其他方式进行?
专家顾问是由谁设计的?
请给我看看代码。专家是由谁设计的?
请出示代码。***而且我只通过交易***成交。
这一点并不清楚。
VHS:
***а закрывал уже только по трейдингу ***
弗拉基米尔-卡尔普托夫。
这一点并不清楚。
键盘上的 "D "和 "L "相邻。我的错误。
键盘上的 "D "和 "L "相邻。错了。
是的,Artem,非常感谢你。显然是自动改变(或歪手)。而自定义类和关闭不是trayDing,是trayLing。
我认为你可以让它变得更简单--在你的EA中,将CLOSE阈值设置为100,并给信号以0.5的权重--因此,一个权重为0.5的信号将永远不会超过100的阈值。