dimon74: Может будет полезно!! Возьми попробуй отталкиваться от одной цены: скажем Bid. Цена открытия для OP_SELLSTOP будет Bid, а для OP_BUYSTOP - Bid+87*Point (или сколько тебе нужно).
Помогите пожалуйста. Может кто знает, как реализовать в коде функцию, которая сравнивает предпоследнее значение из истории с последним (мы говорим о закрытых позициях) не важно значение какой величины (например OrderCloseTime()), и если они разные (в данном случае предпоследнее меньше чем последнее) - произвести БЛА-БЛА-БЛА. По возможности доработайте мой код, или напишите свой, если не в ту сторону залез.
double C_T_L_C_P() {
datetime t;
double r=0;
int i, k=OrdersHistoryTotal(), q=0;
if (q==0)
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
После появления первой единицы надо в цикле проверить, выдержится ли эта единица в течении t+t1 времени (проверка через каждые delta секунд). Если выдержится, то покупаем, а если в какой то момент ее нет то выходим с цикла. Иначе говоря сигнал действителен, если он проверялся определенное время через каждый дельта интервал и всегда был единицой.
Правильно ли я думаю ?
if(sign0==1) //проверка начинаертя только после появления 1
{
t=TimeCurrent(); //фиксируем время//в цикле от t до t+t1 через каждые дельта секундwhile(t<t+t1) //t1 отрезок времени в перед за которое будем проверять if(sign0==1)
{
if(sign0==1) //еще паз проверка наличия 1
sign1=1; //новой переменой присваиваем 1else
{sign1=0;break;} // если нет присваиваем 0 и заканчиваем цикл
t=t+delta; //проверяем через каждые дельта секунд
}
if(sign1==1) op="BUY";
return;
}
После появления первой единицы надо в цикле проверить, выдержится ли эта единица в течении t+t1 времени (проверка через каждые delta секунд). Если выдержится, то покупаем, а если в какой то момент ее нет то выходим с цикла.
Правильно ли я думаю ?
Результат - бесконечный цикл while (t всегда <t+t1, только если t1=0). В цикле sign1 всегда =1
Чтобы исправить ошибку, надо подробно изложить алгоритм
Приходит дискретный сигнал 0 или 1. Если пришла единица, тогда с данново момента начинаем проверку выдержится ли она допустим 10 мин (600 сек) проверяя через каждые 60 сек. Если все 10 мин была единица - Покупка, а если хотя раз небыла единицы тогда заканчиваем проверку и считаем что нет на открытие ни кокого сигнала.
Приходит дискретный сигнал 0 или 1. Если пришла единица, тогда с данново момента начинаем проверку выдержится ли она допустим 10 мин (600 сек) проверяя через каждые 60 сек. Если все 10 мин была единица - Покупка, а если хотя раз небыла единицы тогда заканчиваем проверку и считаем что нет на открытие ни кокого сигнала.
В коде не понятно, как дискретный сигнал sign0 изменяется. В представленном коде - сигнал не меняется. Есть неудачная попытка работать с изменённым t
void CheckForOpen()
{
int res;
datetime t;
int sign=0;
//---- go trading only for first tiks of new bardouble tr0=iCustom(NULL,0,"trd",0,0);
double tr1=iCustom(NULL,0,"trd",1,0);
//---- sell conditionsif(tr1==1)
{
t=TimeCurrent();
while(t<t+tim)
{
if(tr1==1)
sign=-1;
else
{sign=0;break;}
t=t+delta;
}
if(sign==-1)
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
return;
}
Может будет полезно!! Возьми попробуй отталкиваться от одной цены: скажем Bid. Цена открытия для OP_SELLSTOP будет Bid, а для OP_BUYSTOP - Bid+87*Point (или сколько тебе нужно).
Теперь один магик, в параметрах задается
Помогите пожалуйста. Может кто знает, как реализовать в коде функцию, которая сравнивает предпоследнее значение из истории с последним (мы говорим о закрытых позициях) не важно значение какой величины (например OrderCloseTime()), и если они разные (в данном случае предпоследнее меньше чем последнее) - произвести БЛА-БЛА-БЛА. По возможности доработайте мой код, или напишите свой, если не в ту сторону залез.
double C_T_L_C_P() {
datetime t;
double r=0;
int i, k=OrdersHistoryTotal(), q=0;
if (q==0)
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (t<OrderCloseTime()) {r=OrderCloseTime();}
}}}
return (r);}
СПАСИБО ЗАРАНЕЕ!!!
Помогите с проверкой.
После появления первой единицы надо в цикле проверить, выдержится ли эта единица в течении t+t1 времени (проверка через каждые delta секунд). Если выдержится, то покупаем, а если в какой то момент ее нет то выходим с цикла. Иначе говоря сигнал действителен, если он проверялся определенное время через каждый дельта интервал и всегда был единицой.
Правильно ли я думаю ?
Помогите с проверкой.
После появления первой единицы надо в цикле проверить, выдержится ли эта единица в течении t+t1 времени (проверка через каждые delta секунд). Если выдержится, то покупаем, а если в какой то момент ее нет то выходим с цикла.
Правильно ли я думаю ?
Результат - бесконечный цикл while (t всегда <t+t1, только если t1=0). В цикле sign1 всегда =1
Результат - бесконечный цикл while (t всегда <t+t1, только если t1=0). В цикле sign1 всегда =1
Как исправить ошибку ?
Как исправить ошибку ?
Чтобы исправить ошибку, надо подробно изложить алгоритм (не код, а алгоритм). А потом на алгоритм наложить код
Чтобы исправить ошибку, надо подробно изложить алгоритм
Приходит дискретный сигнал 0 или 1. Если пришла единица, тогда с данново момента начинаем проверку выдержится ли она допустим 10 мин (600 сек) проверяя через каждые 60 сек. Если все 10 мин была единица - Покупка, а если хотя раз небыла единицы тогда заканчиваем проверку и считаем что нет на открытие ни кокого сигнала.
Приходит дискретный сигнал 0 или 1. Если пришла единица, тогда с данново момента начинаем проверку выдержится ли она допустим 10 мин (600 сек) проверяя через каждые 60 сек. Если все 10 мин была единица - Покупка, а если хотя раз небыла единицы тогда заканчиваем проверку и считаем что нет на открытие ни кокого сигнала.
В коде не понятно, как дискретный сигнал sign0 изменяется. В представленном коде - сигнал не меняется. Есть неудачная попытка работать с изменённым t