Considering that calculating volume (V) using raster data has a simple algorithm which is:
V = ap x h
where ap = area of all pixels within the lake, h = height or elevation
And
h = vp
where vp = sum of the difference between h and the digital value of all pixels within the lake
Thus, the volume of the lake is the sum of all areas of the pixels (ap) multiplied by their respective distance to the top of the lake (vp). To achieve this, you can follow this procedure:
decide where your dam wall will be and its height or elevation (h)
create a polygon layer mimicking the surface of your lake barely following the height or elevation (h) over the DEM (you can do that more accurately using additional tools)
extract the raster corresponding to the DEM perimeter using a mask (Clip Raster by Mask Layer tool, that can be found in Raster >> Extraction)
in the Processing Toolbox select Raster analysis and choose Raster Surface Volume.
in the Raster Surface Volume window choose the following:
5.1. In Input Layer select your DEM
5.2. For Base Level type the height or elevation (h)
5.3. For Method select Count Only Below Base Level (B), because you want to calculate the volume of the lake from the surface (h) to the bottom.
5.4. Lastly for Output Parameter you can be save it to a file or in temporary file
5.5. Hit the Run button
Note that the result will show the surface area, the volume and pixel count. So, be mindful that the units of these results will be the same units as the ones used in your DEM. So, to make things easier, make sure your DEM has a metric coordinate system, such as UTM, rather than a Geographic coordinate system in degrees. If the area of the DEM is too large, I suggest using an Albers projection.