ПОМОГИТЕ РАЗОБРАТЬСЯ В ЧЕМ ОШИБКА

 

народ помогие релизовать этого оператоа хотябы кто что знаем и чем может помоч

оператор ( Условие если закрылся любой ордер )                  
{   то опредеяем тип закрытого ордера определяем по 3 значениям 
это по типу ордера бай или сел и по объему лота, по стопу или по тейку закрылся, 
алгоритм определение бай =B, сел=S, лот0.1=1, лот0.5=5, лот1=10, закрытие по стопу =C , 
закрытие по тейку =T ,
итак пример закрылся бай с лотом 0.5 по тейку то значение передается B,5,T    }  
значение передаем следущему оператору

{  по переданому значению выбераем из списка нужный ордер и открываем его  } 
после того как ордер открыт возращяемся в начало

 
int mag;

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


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
чуть не в таком виде....
 
dimeon:
чуть не в таком виде....

спс щя буду пробывать

 
dimeon:
чуть не в таком виде....

скажите а как зделать после открытия ордера по этим даным очищял даные а то он у меня их открывает на каждом тике

 

кто подскажет как очистить константы после открытия по ним ордера а то у меня на каждом новом тике открывает по ним ордера

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

Ребята!!! помогите справиться с пробелом в знаниях:

мне надо организовать сравнение одного из показателей индикатора Ichimoku Kinko Hyo, а точнее линии Сhinkou Span (Chinkou Span показывает цену закрытия текущей свечи, сдвинутую назад на величину второго временного интервала.) с графиком цены но с тем же отставание. Тоесть пересечение Сhinkou Span снизу вверх ценового графика и наоборот - с верху в низ ценового гарфика. Я решил делать такое сравнение через Moving Average, я сделал минимальный период и получил линию графика цены, ну и пытаюсь сравнить такой Moving Average и линию Сhinkou Span. Но почемуто не выходит. Может кто подскажет как проще это сделать?! или скажем если у меня Сhinkou Span отстает на 23 еденицы то как прописать правильно переменную с Moving Average но с таким же отставанием??

покажу тут как я сам прописал переменные и организовал отставание перем.Moving Average   :

double Ten=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_TENKANSEN,1);
double Kij=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_KIJUNSEN,1);
double SpanA=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_SENKOUSPANA,1);
double SpanB=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_SENKOUSPANB,1);
double Chinkou=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_CHINKOUSPAN,1);
  double MA=iMA( NULL, 0, 0, 0, int MODE_SMMA, int PRICE_WEIGHTED, int 23); 

double Ten1=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_TENKANSEN,2);
double Kij1=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_KIJUNSEN,2);
double SpanA1=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_SENKOUSPANA,2);
double SpanB1=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_SENKOUSPANB,2);
double Chinkou1=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_CHINKOUSPAN,2);
  double MA1=iMA( NULL, 0, 0, 0, int MODE_SMMA, int PRICE_WEIGHTED, int 24);

double Ten2=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_TENKANSEN,3);
double Kij2=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_KIJUNSEN,3);
double SpanA2=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_SENKOUSPANA,3);
double SpanB2=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_SENKOUSPANB,3);
double Chinkou2=iIchimoku(NULL, 0,Tenkan, Kijun, Senkou, MODE_CHINKOUSPAN,3);
  double MA2=iMA( NULL, 0, 0, 0, int MODE_SMMA, int PRICE_WEIGHTED, int 25);
 

 
Camanch:
покажу тут как я сам прописал переменные и организовал отставание перем.Moving Average :

....................................
double MA=iMA( NULL, 0, 0, 0, int MODE_SMMA, int PRICE_WEIGHTED, int 23);

.................................

Если Вы пытались сделать вызов функции, то это неверно: Типы переменных не указываются. Если описание, то оно не может находиться внутри другой функции.

Удачи.

 
FoxUA:

скажите а как зделать после открытия ордера по этим даным очищял даные а то он у меня их открывает на каждом тике


int mag;

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

if (OrdersTotal()==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

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

Вообще надо или более точно давать ТЗ или лучше попробывать почитать хелпы к функциям.

Функции очень простые.

 
dimeon:

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

Вообще надо или более точно давать ТЗ или лучше попробывать почитать хелпы к функциям.

Функции очень простые.

он все считывает! но после открытия ордера он не обнуляет даные и по новой открывает ордера на каждом тике


вот ордер который открыт по переменым,но как зделать чтоб после его открытия даные переменых обнулялись

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());

if(tic1>0){
b=0;s=0; //соответственно бай или селл  
bs=0;// если закрытие по стоплоссу ордера бай
ss=0;// если закрытие по стоплоссу ордера sell
bt=0;
st=0;//      то же по ТП
bl=0;sl=0; // лоты соответсвенно для бай и селл
}
//-----------
return(tic1);}

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

#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


extern int TakeProfit=18;
extern int StopLoss=18;
extern double Lot=0.01;
extern int StartTime=0;
int Today=0;
int h=10;
int h1=26;
int mag=777;
bool b=0;
bool s=0; //соответственно бай или селл  
bool bs=0;// если закрытие по стоплоссу ордера бай
bool ss=0;// если закрытие по стоплоссу ордера sell
bool bt=0;
bool st=0;//      то же по ТП
double bl=0;
double sl=0; // лоты соответсвенно для бай и селл

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
 
dimeon:

Скажите пожалуста в чем проблема, после закрытия рыночного ордера должен устанавливатся новый отложеный ордер он устанавливается, но не прекращяет это действие а открывает дальше на каждом новом тике!
Файлы:
test7_1.mq4  6 kb
Причина обращения: