Как это чудо использовать в торговле?
Помедитировать, знаете ли расслабляет :)
Это же скрипт демонстрирующий возможности технологии, какое тут применение.
Яйцеклетка перед зачатием. До сих пор не понимаю зачем это выкладывать, лучше бы полезное что делали и не доработанное.
Помедитировать, знаете ли расслабляет :)
Это же скрипт демонстрирующий возможности технологии, какое тут применение.
А толку от этих возможностей если они не приносят пользы)))
Нововведения очень часто встречают в штыки вот такие "сермяжные практики", которые судят о вселенских проблемах с точки зрения своего носа, для которого ничего не пахнет.
А потом, когда польза видна всем, они о своих наездах благополучно забывают.
Нововведения очень часто встречают в штыки вот такие "сермяжные практики", которые судят о вселенских проблемах с точки зрения своего носа, для которого ничего не пахнет.
А потом, когда польза видна всем, они о своих наездах благополучно забывают.
А что, взаимопоглощение ордеров так и осталось?
оно не то чтоб осталось.
оно по другому и быть не может.
Со следующего билда будут доступны новые возможности по созданию графических ресурсов на лету с помощью функций ResourceCreate().
Вот переписанный и упрощенный скрипт, который обходится без сброса картинок на диск, работает быстрее и без конфликтов доступа к ресурсам на диске:
//+------------------------------------------------------------------+ //| OpenCLTest.mq5 | //| Copyright 2011, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2011, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //--- #define SIZE_X 512 #define SIZE_Y 512 //+------------------------------------------------------------------+ //| OpenCL function code | //+------------------------------------------------------------------+ const string cl_src= "__kernel void MFractal( \r\n" " float x0, \r\n" " float y0, \r\n" " float x1, \r\n" " float y1, \r\n" " uint max, \r\n" " __global uint *out) \r\n" " { \r\n" " size_t w = get_global_size(0); \r\n" " size_t h = get_global_size(1); \r\n" " size_t gx = get_global_id(0); \r\n" " size_t gy = get_global_id(1); \r\n" " float dx = x0 + gx * (x1-x0) / (float) w; \r\n" " float dy = y0 + gy * (y1-y0) / (float)h; \r\n" " float x = 0; \r\n" " float y = 0; \r\n" " float xx = 0; \r\n" " float yy = 0; \r\n" " float xy = 0; \r\n" " uint i = 0; \r\n" " while ((xx+yy)<4 && i<max) \r\n" " { \r\n" " xx = x*x; \r\n" " yy = y*y; \r\n" " xy = x*y; \r\n" " y = xy+xy+dy; \r\n" " x = xx-yy+dx; \r\n" " i++; \r\n" " } \r\n" " if(i==max) \r\n" " out[w*gy+gx] = 0; \r\n" " else \r\n" " out[w*gy+gx] = (uint)((float)0xFFFFFF/(float)max)*i; \r\n" " } \r\n"; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int cl_ctx; int cl_prg; int cl_krn; int cl_mem; //--- initializing OpenCL objects if((cl_ctx=CLContextCreate())==INVALID_HANDLE) { Print("OpenCL not found"); return; } if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE) { CLContextFree(cl_ctx); Print("OpenCL program create failed"); return; } if((cl_krn=CLKernelCreate(cl_prg,"MFractal"))==INVALID_HANDLE) { CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL kernel create failed"); return; } if((cl_mem=CLBufferCreate(cl_ctx,SIZE_X*SIZE_Y*sizeof(uint),CL_MEM_READ_WRITE))==INVALID_HANDLE) { CLKernelFree(cl_krn); CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL buffer create failed"); return; } //--- getting ready for execution float x0 =-2; float y0 =-0.5; float x1 =-1; float y1 = 0.5; uint max = 20000; uint offset[2]={0,0}; uint work [2]={SIZE_X,SIZE_Y}; string objname ="OpenCL_"+IntegerToString(ChartID()); string resname ="Mandelbrot_"+IntegerToString(ChartID()); //--- setting unchangeable OpenCL function parameters CLSetKernelArg(cl_krn,4,max); CLSetKernelArgMem(cl_krn,5,cl_mem); //--- creating the object for graphics display ObjectCreate(0,objname,OBJ_BITMAP_LABEL,0,0,0); ObjectSetInteger(0,objname,OBJPROP_XDISTANCE,4); ObjectSetInteger(0,objname,OBJPROP_YDISTANCE,26); //--- create initial empty picture uint buf[]; ArrayResize(buf,SIZE_X*SIZE_Y); ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA); ObjectSetString(0,objname,OBJPROP_BMPFILE,"::"+resname); //--- rendering, till we are not stopped from the outside while(!IsStopped()) { uint x=GetTickCount(); //--- setting floating parameters CLSetKernelArg(cl_krn,0,x0); CLSetKernelArg(cl_krn,1,y0); CLSetKernelArg(cl_krn,2,x1); CLSetKernelArg(cl_krn,3,y1); //--- rendering the frame CLExecute(cl_krn,2,offset,work); //--- taking the frame data CLBufferRead(cl_mem,buf); //--- outputting the rendering time Comment(IntegerToString(GetTickCount()-x)+" msec per frame"); //--- saving the frame in memory and drawing it ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA); ChartRedraw(); //--- a small pause and parameters update for the next frame Sleep(10); x0+=0.001f; x1-=0.001f; y0+=0.001f; y1-=0.001f; } //--- removing OpenCL objects CLBufferFree(cl_mem); CLKernelFree(cl_krn); CLProgramFree(cl_prg); CLContextFree(cl_ctx); //--- remove object ObjectDelete(0,objname); } //+------------------------------------------------------------------+
Тем самым можно создавать любые динамические 32 битные изображения с альфа каналами для детальной отрисовки.
Динамически созданные ресурсы попадают в менеджер ресурсов и доступны всем MQL5 программам терминала.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
OpenCL Test:
Автор: Renat Fatkhullin