Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо Mladen за код ... Есть ли здесь двойное сравнение macd и пересечение 50, как вы объяснили в предыдущей логике. Заранее спасибо.
macerina
Разница в том, что в осиной графической версии вторичный сигнал на вход - это пересечение rsi и его сигнальной линии, а в версии метатрейдера вторичный сигнал - это пересечение rsi линии 50. Macd часть та же (нужно брать сигнал закрытого бара - так сделано в осиновой графической версии).
спасибо за информацию mladen ... возможно ли установить опцию в том же индикаторе для выбора пересечения 50 линии и пересечения сигнальной линии...
Заранее спасибо
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
HI
Этот индикатор перерисовывается? Если да, то на сколько баров назад?
xps_v8_oscillator.ex4xps_v8_oscillator.mq4Хорошо, но я использую это на автономном графике M2 :S Так что это не обычный таймфрейм.
Хорошо, но я использую это на автономном графике 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);
}
И что?
Я не могу изменить период, только могу посмотреть исходный код, вот он:
#свойство индикатор_разделять_окно
#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 ордеров. Пожалуйста, помогите мне исправить эту ошибку и полностью удалить тейк-профит/стоп-лосс из скрипта.
Будьте здоровы