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); }
}
}
}
}
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
2つのタスク(買いシグナルを例とする)をどのように実装するかを教えてください。
所与:エントリーポイント-ストキャスティクスラインが20を下回るクロス
トレードクローズ - スローストキャスティックラインを通過して80レベルを下方にクロス。
つまり、添付の写真のように、同じレベルで複数のポジションを建てることはありません。
2.レベル80を上から下へスローストキャスティックラインと最初のクロスではなく、2番目のクロスでクローズすること。
2つのタスク(買いシグナルを例とする)をどのように実装するかを教えてください。
所与:エントリーポイント-ストキャスティクスラインが20を下回るクロス
トレードクローズ - スローストキャスティックラインを通過して80レベルを下方にクロス。
つまり、添付の写真のように、同じレベルで複数のポジションを建てることはありません。
2) 2つ目の注文は、スローストキャスティクスラインを通りレベル80を下方にクロスした時(1つ目ではなく2つ目)に決済する。
まず明確に定式化する。
構築したExpert AdvisorのOnTick機能 で、ポジション情報にアクセスする方法を教えてください。せめて、開いているかどうかだけでも。ポジションのポインターはどこで手に入りますか?それとも他の方法で行う必要があるのでしょうか?
Expert Advisorは誰が設計したのですか?
コードを表示してください。エキスパートの設計者は誰ですか?
コードを表示してください。***そして、私はこれまでトレードによってしかクローズしたことがありません***。
はっきりしないんです。
VHS:
***а закрывал уже только по трейдингу ***
ウラジーミル・カルプトフ
明確ではありません。
キーボードで隣り合った "D "と "L"。私のミスです。
キーボードで隣り合った "D "と "L"。間違っている。
はい、アルテムさん、ありがとうございました。どうやらオートチェンジ(手が曲がっている)のようです。そして、カスタムクラスとクローズはtrayDingではなく、trayLingです。
EAでCLOSEスレッショルドを100に設定し、シグナルに0.5のウェイトを与えることで、ウェイト0.5のシグナルは決して100スレッショルドを超えないようにすることができます。