Помощь в кодировании - страница 246

 
macerina:
Спасибо Mladen за код ... Есть ли здесь двойное сравнение macd и пересечение 50, как вы объяснили в предыдущей логике. Заранее спасибо.

macerina

Разница в том, что в осиной графической версии вторичный сигнал на вход - это пересечение rsi и его сигнальной линии, а в версии метатрейдера вторичный сигнал - это пересечение rsi линии 50. Macd часть та же (нужно брать сигнал закрытого бара - так сделано в осиновой графической версии).

 

спасибо за информацию mladen ... возможно ли установить опцию в том же индикаторе для выбора пересечения 50 линии и пересечения сигнальной линии...

Заранее спасибо

 
mladen:
sulaimoney Все в порядке с этими процедурами. Прикрепляю простой индикатор, который показывает, что все в порядке, когда вызовы этих двух процедур выполняются один за другим. Проверьте остальной код, так как ошибка не в этих двух процедурах

Здравствуйте Младен

Я проверил код и нашел несколько ошибок, которые я заменил.

Теперь я пытаюсь использовать значение

double lastorderprice = 0;

И

int bscount = 0;

Как переменные в глобальной области видимости в ea, чтобы их можно было вызывать из e.g void NewOrder()

// OnEveryTick

void LastBuySellOrder() // Перебирает все открытые ордера для выбора последнего ордера (buy/sell) OnEveryTick

{

double lastorderprice = 0;

datetime lastTime = 0;

datetime closeTime = 0;

int lastTicket = -1; // Ни одного открытого ордера.

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId

&& (OrderType() == OP_BUY || OrderType() == OP_SELL )

&& OrderOpenTime() >= lastTime && OrderCloseTime() == closeTime

&& OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastorderprice = OrderOpenPrice();

closeTime = OrderCloseTime();

lastTicket = OrderTicket();

}

return(lastTicket);

}

else

Print("Ошибка OrderSelect() - ", ErrorDescription(GetLastError()));

}

void PendingStopOrderCount()

{

int bscount = 0;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

if (OrderType() == OP_BUYSTOP )

{

bscount++;

}

}

else

{

Print("Ошибка OrderSend() - ", ErrorDescription(GetLastError()));

}

}

// Если существует OpBuy или OpSell

void NewOrder()

{

if (bscount==0)

{

BuyStopPending();

}

}

 

ПРИВЕТ

Этот индикатор перерисовывает? Если да, то на сколько баров назад?

xps_v8_oscillator.ex4xps_v8_oscillator.mq4

Файлы:
 
toldmikl:
HI

Этот индикатор перерисовывается? Если да, то на сколько баров назад?

xps_v8_oscillator.ex4xps_v8_oscillator.mq4
Да. Это индикатор солнечного ветра с периодами, устанавливаемыми автоматически в зависимости от таймфрейма:

1 минута: период = 2880

5 минут : период = 576

15 минут : период = 192

30 минут: период = 96

1 час и выше: период = 48

 

Хорошо, но я использую это на автономном графике M2 :S Так что это не обычный таймфрейм.

 
toldmikl:
Хорошо, но я использую это на автономном графике M2 :S Так что это не нормальный таймфрейм.

Попробуйте и вы убедитесь в этом сами (используйте что-то вроде autorefresh, чтобы заставить индикатор обновлять все бары или просто, когда построено достаточно новых баров, зайдите в параметры, ничего не меняйте и нажмите OK). Обращайте внимание на периоды, когда тренд меняется, что он будет делать.

Это лучше, чем я буду пытаться объяснить, что не так в коде солнечной винды и убедить кого-либо.

 

Я не могу изменить период только я могу видеть исходный код вот он:

#property indicator_separate_window

#property indicator_minimum 0

#property indicator_maximum 1

#property indicator_buffers 3

#property indicator_color2 C'72,49,255'

#property indicator_color3 C'255,49,72'

#property indicator_width2 6

#property indicator_width3 6

int period;

extern bool alarm=false;

double ExtBuffer0[];

double ExtBuffer1[];

double ExtBuffer2[];

double alertBar;

double last;

int init() {

//-----------------------------

switch ( Period() )

{

case 1: period = 2880;break;

case 5: period = 576;break;

case 15: period = 192;break;

case 30: period = 96;break;

case 60: period = 48;break;

case 240: period = 48;break;

case 1440: period = 48;break;

case 10080: period = 48;break;

по умолчанию : period = 48;break;

}

//-----------------------------

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(Digits+1);

SetIndexBuffer(0,ExtBuffer0);

SetIndexBuffer(1,ExtBuffer1);

SetIndexBuffer(2,ExtBuffer2);

IndicatorShortName("");// X :-)");

SetIndexLabel(0, NULL);

SetIndexLabel(1, NULL);

SetIndexLabel(2, NULL);

return(0);

}

int deinit()

{

//----

ObjectDelete("XPS");

ObjectDelete("XPS2");

ObjectDelete("XPS3");

//----

return(0);

}

int start() {

int limit;

int counted_bars=IndicatorCounted();

double prev,current,old;

double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;

double price;

double MinL=0;

double MaxH=0;

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(int i=0; i<limit; i++)

{ MaxH = High;

MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)];

цена = (High+Low)/2;

Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;

Value=MathMin(MathMax(Value,-0.999),0.999);

ExtBuffer0=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;

Value1=Value;

Fish1=ExtBuffer0;

}

bool up = TRUE;

for(i=limit-2; i>=0; i--)

{

current=ExtBuffer0;

prev=ExtBuffer0;

if (((current0))||(current<0)) up = false;

if (((current>0)&&(prev0)) up= true;

if(!up) {

ExtBuffer2=1;

ExtBuffer1=0;

if (alarm && i==0 && last != 2 && ExtBuffer1 == 0 && Bars>alertBar)

{

Alert("OSC... Возможный тренд идет ВНИЗ на ",Period()," ",Symbol());

alertBar = Bars;last = 2;

}

}

else {

ExtBuffer1=1;

ExtBuffer2=0;

if (alarm && i==0 && last != 1 && ExtBuffer2 == 0 && Bars>alertBar)

{

Alert("OSC... Возможный тренд идет вверх на ",Period()," ",Symbol());

alertBar = Bars;

last = 1;

}

}

}//End Loop

ObjectDelete("XPS");

ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS","!XPS v8", 28, "Arial Black", C'46,46,46');

ObjectSet("XPS", OBJPROP_CORNER, 2);

ObjectSet("XPS", OBJPROP_BACK, 0);

ObjectSet("XPS", OBJPROP_XDISTANCE, 6);

ObjectSet("XPS", OBJPROP_YDISTANCE, 8);

ObjectDelete("XPS2");

ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS2","!XPS v8", 28, "Arial Black", Silver);

ObjectSet("XPS2", OBJPROP_CORNER, 2);

ObjectSet("XPS2", OBJPROP_BACK, 0);

ObjectSet("XPS2", OBJPROP_XDISTANCE, 4);

ObjectSet("XPS2", OBJPROP_YDISTANCE, 10);

ObjectDelete("XPS3");

ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS3", "Торгуй как BOSS", 9, "Arial Black", Silver);

ObjectSet("XPS3", OBJPROP_CORNER, 2);

ObjectSet("XPS3", OBJPROP_BACK, 0);

ObjectSet("XPS3", OBJPROP_XDISTANCE, 7);

ObjectSet("XPS3", OBJPROP_YDISTANCE, 3);

return(0);

}

И что?

 
toldmikl:
Я не могу изменить период, только могу посмотреть исходный код, вот он:

#свойство индикатор_разделять_окно

#property indicator_minimum 0

#property indicator_maximum 1

#property indicator_buffers 3

#property indicator_color2 C'72,49,255'

#property indicator_color3 C'255,49,72'

#property indicator_width2 6

#property indicator_width3 6

int period;

extern bool alarm=false;

double ExtBuffer0[];

double ExtBuffer1[];

double ExtBuffer2[];

double alertBar;

double last;

int init() {

//-----------------------------

switch ( Period() )

{

case 1: period = 2880;break;

case 5: period = 576;break;

case 15: period = 192;break;

case 30: period = 96;break;

case 60: period = 48;break;

case 240: period = 48;break;

case 1440: period = 48;break;

case 10080: period = 48;break;

по умолчанию : period = 48;break;

}

//-----------------------------

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(Digits+1);

SetIndexBuffer(0,ExtBuffer0);

SetIndexBuffer(1,ExtBuffer1);

SetIndexBuffer(2,ExtBuffer2);

IndicatorShortName("");// X :-)");

SetIndexLabel(0, NULL);

SetIndexLabel(1, NULL);

SetIndexLabel(2, NULL);

return(0);

}

int deinit()

{

//----

ObjectDelete("XPS");

ObjectDelete("XPS2");

ObjectDelete("XPS3");

//----

return(0);

}

int start() {

int limit;

int counted_bars=IndicatorCounted();

double prev,current,old;

double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;

double price;

double MinL=0;

double MaxH=0;

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

for(int i=0; i<limit; i++)

{ MaxH = High;

MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)];

цена = (High+Low)/2;

Value = 0.33*2*((price-MinL)/(MaxH-MinL)-0.5) + 0.67*Value1;

Value=MathMin(MathMax(Value,-0.999),0.999);

ExtBuffer0=0.5*MathLog((1+Value)/(1-Value))+0.5*Fish1;

Value1=Value;

Fish1=ExtBuffer0;

}

bool up = TRUE;

for(i=limit-2; i>=0; i--)

{

current=ExtBuffer0;

prev=ExtBuffer0;

if (((current0))||(current<0)) up = false;

if (((current>0)&&(prev0)) up= true;

if(!up) {

ExtBuffer2=1;

ExtBuffer1=0;

if (alarm && i==0 && last != 2 && ExtBuffer1 == 0 && Bars>alertBar)

{

Alert("OSC... Возможный тренд идет ВНИЗ на ",Period()," ",Symbol());

alertBar = Bars;last = 2;

}

}

else {

ExtBuffer1=1;

ExtBuffer2=0;

if (alarm && i==0 && last != 1 && ExtBuffer2 == 0 && Bars>alertBar)

{

Alert("OSC... Возможный тренд идет вверх на ",Period()," ",Symbol());

alertBar = Bars;

last = 1;

}

}

}//End Loop

ObjectDelete("XPS");

ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS","!XPS v8", 28, "Arial Black", C'46,46,46');

ObjectSet("XPS", OBJPROP_CORNER, 2);

ObjectSet("XPS", OBJPROP_BACK, 0);

ObjectSet("XPS", OBJPROP_XDISTANCE, 6);

ObjectSet("XPS", OBJPROP_YDISTANCE, 8);

ObjectDelete("XPS2");

ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS2","!XPS v8", 28, "Arial Black", Silver);

ObjectSet("XPS2", OBJPROP_CORNER, 2);

ObjectSet("XPS2", OBJPROP_BACK, 0);

ObjectSet("XPS2", OBJPROP_XDISTANCE, 4);

ObjectSet("XPS2", OBJPROP_YDISTANCE, 10);

ObjectDelete("XPS3");

ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS3", "Торгуй как BOSS", 9, "Arial Black", Silver);

ObjectSet("XPS3", OBJPROP_CORNER, 2);

ObjectSet("XPS3", OBJPROP_BACK, 0);

ObjectSet("XPS3", OBJPROP_XDISTANCE, 7);

ObjectSet("XPS3", OBJPROP_YDISTANCE, 3);

return(0);

}

И что?

Он применяет период 48 для любого временного интервала, который не является стандартным (например, "2 минуты" автономных графиков).

Версии солнечных ветров, для которых можно изменить период расчета, смотрите в этой теме: https: //www.mql5.com/en/forum/179650.

 

Приветствую вас, гуру, пожалуйста, помогите мне отредактировать этот скрипт и оставить только ордер, размер лота, покупку/продажу. У меня уже есть советник, который автоматически выставляет тейк профит/стоп лосс, тем самым конфликтуя с этим инди.

Этот скрипт автоматически открывает сразу любое количество рыночных ордеров, указанных в МЕНЮ, но в настоящее время он открывает только один ордер, даже если вы ввели 5 ордеров. Пожалуйста, помогите мне исправить эту ошибку и полностью удалить тейк-профит/стоп-лосс из скрипта.

Будьте здоровы

Файлы:
Причина обращения: