[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 741

 

вотак он уменя стоит в експерте

bool b=0,s=0, //соответственно бай или селл  
bs=0,// если закрытие по стоплоссу ордера бай
ss=0,// если закрытие по стоплоссу ордера sell
bt=0,
st=0;//      то же по ТП
double bl=0,sl=0; // лоты соответсвенно для бай и селл


for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1; if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*10; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*10; break;}
            }
         }
      }


}//end

if(bs==1||bl==1)
{   
    NewOrder1(OP_BUYLIMIT,Lot);
    
    Today=TimeDay(TimeCurrent());}
    

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);

if(tic1<0) Print(GetLastError());

return(0);}





 
artmedia70:
У вас булевские переменные изначально не инициализированы значением false, вообще, перед входом в цикл обнуляйте их (false) - при выходе из цикла они будут иметь присвоенные им в цикле значения (лучше true, чем 1) и далее до следующего входа в цикл они их и будут иметь таковыми. Если открытие ордера строго зависит от значений этих переменных, то после приказа на открытие ордера, проверьте наличие в рынке данной позы и, если она присутствует, то обнулите переменные (false)

а в коде можете обрисавать

 
artmedia70:
Сравнивайте значение ADX на текущем баре (а лучше на первом) со значением ADX на предыдущем баре (лучше на втором).

Если тупо в лоб, то примерно так:

Но так некрасиво. Лучше присвоить переменным double значения ADX и работать дальше с переменными...






Большое спасибо за помощь:)
 

Друзья! Не соображу как избавиться от лишних сигналов, возникающих при пересторении трендовой линии. Трендовая (в примере нисходящая) строится от наибольшего экстремума к наименьшему экстремуму, найденных на заданном промежутке баров. Проблема заключается в том, что при возникновении нового наименьшего экстремума, трендовая линия перескакивает на него (так задумано).

Но, также на первом баре трендовой линии строятся уровни со значением трендовой, пересечение которых линией индикатора даёт сигнал. Если линия индюкатора на первом баре ниже этого уровня, а на втором баре она выше этого уровня - имеем пересечение сверху-вниз.

Так вот... Когда трендовая перескакивает на новый наименьший экстремум, возникает ситуация, при которой линия индюка на втором баре становится выше линии трендовой и построенного уровня, а на первом баре - ниже, т.е. возникает ненужный сигнал на продажу (в данном случае):


На рисунке видно как трендовая перескочила на новый экстремум (место обозначено стрелочкой вниз) и ценовой уровень новой трендовой на первом баре (гориз. красная чёрточка)
стал ниже чем линия AD на втором, при этом линия AD на первом ниже ценового уровня...
Соответственно, перемещением трендовой линии на более низкий экстремум смоделировали ненужный сигнал... Такой же ненужный сигнал имел место быть чуть раньше -
я его отметил вертикальной светло-голубой линией...

Отсюда вопрос - как избежать такой ситуации? Из сил выбился, пытаясь чё-нить придумать...
Есть какие мысли? Спасибо... :)

 
profitinvesting:
Большое спасибо за помощь:)
Да как бы не за что :)
 
ToLik_SRGV:

В самом начале функции старт добавьте строчку вызова этой функции:

Советник будет включаться 1 раз, только на новом баре. 

Уважаемый Анатолий. Огромное Вам спасибо за данный код. Еще такой вопрос, а как сделать так, чтобы он постоянно работал, но мог заключить только 1 сделку на баре?
 
artmedia70:
то после приказа на открытие ордера, проверьте наличие в рынке данной позы и, если она присутствует, то обнулите переменные (false)

скажите а как это можно реалезовать в моем ордере ?

какую функцию в мои ордера надо вставить чтоб она обнуляла значения ?

 
FoxUA:

скажите а как это можно реалезовать в моем ордере ?

какую функцию в мои ордера надо вставить чтоб она обнуляла значения ?


Просто после проверки наличия ордера в рынке присвойте значения переменным. Например Variable1 = false;
Те переменные, которые у вас в цикле получили значение "истина", что послужило критерием для выставления ордера, после его установки должны опять получить значение "ложь", иначе так и будут ордера пачками ставиться. Вот вы этим своим переменным и присвойте значения false.
 
artmedia70:
Просто после проверки наличия ордера в рынке присвойте значения переменным. Например Variable1 = false;
Те переменные, которые у вас в цикле получили значение "истина", что послужило критерием для выставления ордера, после его установки должны опять получить значение "ложь", иначе так и будут ордера пачками ставиться. Вот вы этим своим переменным и присвойте значения false.

наверо сказуется шо я 2 дня не сплю и мучаюсь с этим експертом потому не че не понял шо и куда надо ставит из того что вы сказали не затруднит ли вас поставить эти значения на том коде что я вылаживал или просто написать функцию и сказать куда конкретно ее постаить это последняя часть в моем пазле и я не как не могу сосредоточится куда и как ее воткнуть

 
FoxUA:

наверо сказуется шо я 2 дня не сплю и мучаюсь с этим експертом потому не че не понял шо и куда надо ставит из того что вы сказали не затруднит ли вас поставить эти значения на том коде что я вылаживал или просто написать функцию и сказать куда конкретно ее постаить это последняя часть в моем пазле и я не как не могу сосредоточится куда и как ее воткнуть

Неохота разбираться с вашим кодом (зло, но честно :)). Скажите, что конкретно хотите получить в итоге и я вам напишу нужную функцию. Честно - так мне будет проще. Мне б со своим кодом разобраться... :)

... Или лягте, поспите, а назавтра все ваши пазлы и соберутся... :) Я лично так делаю, если ничё не понимаю... Кстати, спать пошёл - пол-пятого утра ужо...

Причина обращения: