Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 182
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А вы ж ни куска своего кода не показали - относительно чего пример показывать не понятно.
struct p{
double trailingProfit;
int orders[10];
bool flagOpen;// флаг , указывающий на открытость позиции
//тут еще куча связанных параметров
};
p order[];
int OrderN=-1;
int OnInit()
{
ArrayResize(pair,1,1000);
return(INIT_SUCCEEDED);
}
void openOrder(price){
OrderN++;
int t;
ArrayResize(orders,order+1);
t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue);
if(t==0) Print("не удалось выставить ордер BUYSTOP ", price);
for(intj=0,j<10,++j){
if(orders[OrderN].orders==0) orders[OrderN].orders=t;
break;
}
orders[OrderN].flagOpen=1;
}
//...... тут идет обработка позиций...
void massCut(){
// нужна вот такая функция
}
Что произойдёт с массивом структур при перезапуске советника?
Что произойдёт с массивом структур при перезапуске советника?
массив слетит, этот вопрос не решен.
Воот. А это нужно было обдумать в первую очередь.
Вывод напрашивается сам: массив нужно обнулять и заново заполнять текущим состоянием ордеров и позиций. Но делать это нужно только тогда, когда ловите факт изменения количества ордеров или позиций на счёте.
Всегда будете иметь под рукой только актуальное текущее состояние ордеров и позиций, и не нужно будет выдумывать пляски с удалением несуществующих ордеров/позиций из массива. И список ордеров/позиций придётся прокручивать полностью, либо на заданный промежуток глубины истории, но лишь в специфических случаях - изменение количества ордеров/позиций на счёте.
А зачем такое извращение?
что бы в OnInit при каждой переинициализации не вертелся и сократить статический массив в один экземпляр так как в некоторых местах он написан дважды.. вообщем это оптимизация ресурсов
.. ну оставлю как есть так проще получается на данный момент
Объявляете глобальный массив без указания размера. Функция Ваша устанавливает его размер ArrayResize. И видно глобально, и OnInit освобождена...
не совсем то наверно, массив статический с чётко прописанными значениями раздельно инициализировать не имеет смысла(
что бы в OnInit при каждой переинициализации не вертелся и сократить статический массив в один экземпляр так как в некоторых местах он написан дважды.. вообщем это оптимизация ресурсов
.. ну оставлю как есть так проще получается на данный момент
А в тестере МТ4 комиссии не учитываются что ли?
Вопрос по функции Print(); как заставить Print() печатать в экспертах данные плюс к ним дату(день) ? как это решить ? помогите плиз понять новичку,выкладываю код переделанного ради эксперимента,индюка "пивот" заранее спс!
сам код: PivotsDaily v2.mq4
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Blue
#property indicator_color3 Red
//---- input parameters
extern int CountBars=300;
//---- buffers
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
string Pivot="P",Sup1="S 1", Res1="R 1";
int fontsize=10;
double P,S1,R1,S2,R2,S3,R3;
double LastHigh,LastLow,x;
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete("Pivot");
ObjectDelete("S1");
ObjectDelete("R1");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
IndicatorBuffers(7);
//---- indicator line
SetIndexStyle(0,DRAW_ARROW,2,1,Lime);
SetIndexArrow(0,158);
SetIndexStyle(1,DRAW_ARROW,2,1,Blue);
SetIndexArrow(1,158);
SetIndexStyle(2,DRAW_ARROW,2,1,Red);
SetIndexArrow(2,158);
SetIndexBuffer(0,PBuffer);
SetIndexBuffer(1,S1Buffer);
SetIndexBuffer(2,R1Buffer);
//---- name for DataWindow and indicator subwindow label
short_name="Pivot";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
short_name="R1";
IndicatorShortName(short_name);
SetIndexLabel(2,short_name);
short_name="S1";
IndicatorShortName(short_name);
SetIndexLabel(1,short_name);
SetIndexDrawBegin(0,6);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int limit, i;
//---- indicator calculation
if (counted_bars==0)
{
x=Period();
if (x>CountBars) return(-1);
ObjectCreate("Pivot", OBJ_TEXT, 0, 0,0);
ObjectSetText("Pivot", " Pivot",10,"Arial",Lime);
ObjectCreate("S1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("S1", " S1",10,"Arial",Blue);
ObjectCreate("R1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("R1", " R1",10,"Arial",Red);
}
if(counted_bars<0) return(-1);
limit=(Bars-counted_bars)-1;
for (i=limit; i>=0;i--)
{
if (TimeDayOfWeek(Time[i]) != 0)
{
if (High[i+1]>LastHigh) LastHigh=High[i+1];
if (Low[i+1]<LastLow) LastLow=Low[i+1];
}
if (
TimeDay(Time[i])!=TimeDay(Time[i+1]) && TimeDayOfWeek(Time[i])!=0
)
{
P=Close[i+1];
R1 = LastLow;
S1 = LastHigh;
S2=High[i]-Low[i];
S3=High[i]-Open[i+1];
if(S3==0)
{R2 = S3;} else {R2 = S2/S3;}
Print("R2 ",R2); // <= как заставить принт плюс к данным печатать дату?
LastLow=Open[i]; LastHigh=Open[i];
ObjectMove("Pivot", 0, Time[i],P);
ObjectMove("S1", 0, Time[i],S1);
ObjectMove("R1", 0, Time[i],R1);
}
PBuffer[i]=P;
S1Buffer[i]=S1;
R1Buffer[i]=R1;
}
//----
return(0);
}