Witam,
mam prośbę,
mógłby ktoś wrzucić tu projekt Visual Studio (2008/2010) będący szkieletem dla DLL'ki użytej w indykatorze dla MT4?
posiłkując się tym:
http://www.forex-tsd.com/metatrader-4-m ... n-dll.html
próbowałem coś takiego:
w VS 2010 założyłem Projekt C++ Class Library
Kod: Zaznacz cały
#include "MT4Test.h"
#include "stdafx.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define MT4_EXPFUNC __declspec(dllexport)
MT4_EXPFUNC int __stdcall getVal(int i,int mod)
{
return i%mod;
}
po kompilacji dll wrzuciłem do experts\libraries
w experts/include umieściłem plik DllTest.mqh
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| DllTest.mq4 |
//| Copyright 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| DLL imports |
//+------------------------------------------------------------------+
#import "user32.dll"
int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
#import "MT4Test.dll"
int getVal(int i,int mod);
#import
//+------------------------------------------------------------------+
//| EX4 imports |
//+------------------------------------------------------------------+
#import "stdlib.ex4"
string ErrorDescription(int error_code);
#import
//+------------------------------------------------------------------+
w experts/indicators umieściłem plik DllTest.mql
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//| DllTest.mq4 |
//| Copyright 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#include <DllTest.mqh>
#property indicator_buffers 1
#property indicator_color1 Orange
#property indicator_width1 1
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
double MABuffer[];
int init()
{
IndicatorBuffers(1);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MABuffer);
string short_name;
//---- indicator line
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- name for DataWindow and indicator subwindow label
short_name="DllTest()";
IndicatorShortName(short_name);
SetIndexLabel(0,"NonLagMA");
SetIndexEmptyValue(0,EMPTY_VALUE);
SetIndexDrawBegin(0,0);
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i,shift, counted_bars=IndicatorCounted(),limit;
for(shift=Bars;shift>=0;shift--)
{
MABuffer[shift]=getVal(shift,20);
}
//----
//----
return(0);
}
//+------------------------------------------------------------------+
po dodaniu wskaźnika (zaznaczyłem "Umożliw import DLL")
nic się nie rysuje
Jeśli linijkę
zastąpię przez
indykator rysuje śliczne ząbki (po przekompilowaniu i wrzuceniu jeszcze raz)
co robię źle?
Pozdrawiam